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は、このためのSQL文で0または1
USER_ID, TOTAL_FRUIT, EATEN_FRUIT
---------------------------------
1, 3, 2
2, 2, 2
3, 1, 0
私たちの「最高」の試みに基づいて成功したトランザクションの合計を数えるどこだった:
しかし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
、両方のデータセットだけでうまくいきますが、一緒に処理すると、最初のデータセットは何度も何度も何度も繰り返し表示されます。
を管理することができます
でCOUNT(*)、SUM()とグループを使用する必要がありますが、あなたは前に 'GROUP BY'を使用することがありますか? – mszymborski