我试图在相同列的不同条件下计算(*)两次相同的列
这就是我所拥有的;我尝试了很多东西,却无法让它发挥作用。我不想写两个不同的查询。
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
在上面的查询中。
答案 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
,否则会产生NULL
。 Count
汇总不会计算NULL
值,我们可以找到goodstatus = 2
或goodstatus = 1