2016-04-22 94 views
2

我有这个表在MySQL数据库:查询次数,金额,与条件在一个查询与MySQL

TABLE rating 
| id   (int, primary) 
| id_company (int, index) 
| state  (enum: 'waiting','done','refuse') 
| rating  (int between 1 and 5) 

我想这个统计为一个id_company:

  • 号线
  • 行数与状态=做
  • 总和等级
  • 总和评级,状态=做

为此,我有2个查询(用为例= id_company 2):

SELECT COUNT(1) as `nbr`, SUM(`rating`) as `total` FROM `rating` WHERE `id_company`=2 
SELECT COUNT(1) as `nbr`, SUM(`rating`) as `total` FROM `rating` WHERE `id_company`=2 AND `state`='done' 

但它有可能使一个独特的查询得到这个统计?

回答

1

你可以尝试这样的事情:

SELECT COUNT(*) as `nbr1`, 
     SUM(`rating`) as `total1`, 
     SUM(`state`='done') as `nbr2`, 
     SUM(CASE 
       WHEN `state`='done' THEN `rating` 
       ELSE 0 
      END) as `total2` 
FROM `rating` 
WHERE `id_company`=2 
+0

干得好,谢谢。为什么不让id_company放在where子句中?它也可以工作。 – Jeremy

+1

@Jeremy是的,你是对的。 'WHERE'子句中也应该使用'id_company'谓词,因为它使查询运行得更快。 –

+1

为什么在添加'where'的情况下保存'id_company = 2'? – splash58