我们正在使用Firebird 2.1数据库,并试图运行针对某个特定状态的总交易和交易的报表的查询。每个事务都有一个成功(1)或不成功(0)的状态。还有一个被拒绝的地位(2),但是这在评论中已经涵盖了。我将使用不明确的数据。SQL报告:统计每个用户的总行数并计算每个用户的成功事务数
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
然而,两个数据集本身都可以正常工作,但是当一起处理时,第一个数据集只是一遍又一遍。
您以前用过'GROUP BY'? – mszymborski