SQL报告:计算每个用户的总行数并计算每个用户的成功事务

时间:2016-08-11 20:49:31

标签: sql firebird

我们正在使用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

但是,两个数据集单独工作正常,但在一起处理时,第一个数据集只是一遍又一遍的第一行。

1 个答案:

答案 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