簡體   English   中英

SQL | 如何 GROUP BY 並根據兩個條件獲得不同的 COUNT?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM