【发布时间】:2016-08-23 14:16:16
【问题描述】:
我们正在使用 Firebird 2.1 数据库并尝试运行查询以获取统计总交易和特定状态交易的报告。每个事务都有一个成功 (1) 或不成功 (0) 的状态。还有一个拒绝状态(2),但在 cmets 中有所涵盖。我将使用模棱两可的数据。
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吗?