[英]SQL | How to GROUP BY and get different COUNT's subject to two conditions?
給定一個包含兩個屬性“ID”和“bug”的表,其中“bug”的值為 0 或 1,這意味着
具有該“ID”的人要么提交了錯誤,要么沒有錯誤。 相同的“ID”可能會重新出現在表中。 任務是打印不同的 ID,其中包含錯誤提交和非錯誤提交的數量。 架構和示例表如下
CREATE TABLE commits (
ID INT NOT NULL,
bug INT);
該表是
_ID__|bugs_
| 121|1|
| 121|1|
| 121|0|
| 111|1|
| 111|0|
| 111|1|
| 131|0|
| 131|0|
| 121|1|
| 111|0|
| 121|1|
| 111|0|
| 121|1|
| 131|0|
--------
解決方案應該是(不完全是,但像這樣)
111|3|4
121|6|2
131|1|5
我的方法是創建兩個表,一個“錯誤”等於 1,另一個為 0。然后使用 GROUP BY 並依靠這些來獲得有錯誤和無錯誤提交的表。 然后我使用“ID”INNER JOINED 他們。 最后,使用 COUNT() 訪問 ID 和“buggy”和“notbuggy”列的計數。 這是我的查詢,有效
select distinct buggy.id,buggy.buggycount,notbuggy.notbuggycount from
(select id,count(bug) as buggycount
from (select id,bug from commits where bug = 1) a group by id) buggy
inner join
(select id,count(bug) as notbuggycount
from (select id,bug from commits where bug = 0) a group by id) notbuggy
where buggy.id = notbuggy.id
order by buggy.id;
有沒有更好更短的方法來做到這一點? 理想情況下,沒有任何 INNER JOIN。 謝謝你。
使用條件聚合:
SELECT id,
SUM(bug = 0) notbuggycount,
SUM(bug = 1) buggycount
FROM commits
GROUP BY id;
或者:
SELECT id,
SUM(1 - bug) notbuggycount,
SUM(bug) buggycount
FROM commits
GROUP BY id;
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.