在不同条件下使用相同列计算*两次

时间:2016-10-20 17:04:31

标签: mysql sql

我试图在相同列的不同条件下计算(*)两次相同的列

这就是我所拥有的;我尝试了很多东西,却无法让它发挥作用。我不想写两个不同的查询。

SELECT somedate as date, 
count(*) as goodone, 
sum(money) as goodcost 
FROM goods 
where goodstatus=2 group by date;

当goodstatus = 1是badone时,所以我也想包含它,而不是为它写一个单独的查询。

最后,我想要的是

somedate | goodone | badones| goodcost

如果我尝试执行

,我会得到一个子查询返回多行错误
(SELECT count(*) FROM goods where goodstatus=1) as badones 

在上面的查询中。

1 个答案:

答案 0 :(得分:1)

根据条件计算记录,而不是添加新查询

试试这种方式

SELECT somedate            AS date,
       Sum(goodstatus = 2) AS goodone,
       Sum(goodstatus = 1) AS badones,
       Sum(money)          AS goodcost
FROM   goods
WHERE  goodstatus IN ( 1, 2 )
GROUP  BY date; 

使用CASE语句的另一种方式

count(case when goodstatus = 2 then 1 end) AS goodone,
count(case when goodstatus = 1 then 1 end) AS badones,

在上述CASE语句中,如果条件满足,则会产生1,否则会产生NULLCount汇总不会计算NULL值,我们可以找到goodstatus = 2goodstatus = 1

的出现次数