我们正在使用Firebird 2.1数据库,并尝试运行查询报告,该报告计算特定状态的总交易和交易。每个事务的状态都是成功(1)或不成功(0)。还有一个被拒绝的状态(2),但评论中已经涵盖了这一点。我将使用含糊不清的数据。
USER_ID, Fruit, Eaten
----------------------
1, Apple, 0
1, Banana, 1
1, Kiwi, 1
2, Apple, 1
2, Banana, 1
3, Apple, 0
我们想要做的是运行显示USER_ID,TOTAL_FRUIT和EATEN_FRUIT的报告。其中TOTAL_FRUIT计算交易总数,EATEN_FRUIT计算基于0或1的成功交易总数
USER_ID, TOTAL_FRUIT, EATEN_FRUIT
---------------------------------
1, 3, 2
2, 2, 2
3, 1, 0
我们对SQL语句的“最佳”尝试是:
WITH alias1 AS
(SELECT USER_ID, count(Fruit) as TOTAL_FRUIT FROM myTable GROUP BY USER_ID),
alias2 AS
(SELECT USER_ID, count(Fruit) as EATEN_FRUIT FROM myTable WHERE Eaten=1 GROUP BY USER_ID)
SELECT alias2.USER_ID, TOTAL_FRUIT, EATEN_FRUIT
FROM alias1, alias2
但是,两个数据集单独工作正常,但在一起处理时,第一个数据集只是一遍又一遍的第一行。
答案 0 :(得分:3)
你应该使用count(*),sum()和group by
select user_id, count(*), sum(eaten)
from my_table
group by user_id
您最终还可以管理空值
select user_id, count(*), sum(coalesce(eaten,0))
from my_table
group by user_id