[英]SQL Count Distinct IDs with condition
我想進行一個查詢,在該查詢中我可以為給定列計算至少具有1個真值的ID的數量,並一次對多個列執行此操作。
例如,我有一個這樣的數據庫:
Table1
Name col_1 col_2
A true true
A false true
B false false
C true false
C true false
Table2
Name ID
A 1
B 2
C 3
我本質上想計算有多少列ID為true(結果顯示如下):
Row col_1_true col_2_true
1 2 1
對於單列,我可以這樣做:
SELECT
COUNT(DISTINCT ID, col_1) as col_1_true
FROM table1, table2
WHERE table1.Name = table2.Name
col_1 = true
但是我想從單個查詢的最終輸出中獲得所有期望的計數(因為我的實際數據集有很多列,我希望定期查詢),因此如下所示:
SELECT
COUNT(DISTINCT ID, col_1 = true) as col_1_true
COUNT(DISTINCT ID, col_2 = true) as col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
我嘗試了許多方法,這些方法大致如下:
SUM(DISTINCT ID, CASE WHEN col_1 = true THEN 1 ELSE 0 END)
引發錯誤(函數SUM的參數過多),或者
SELECT
SUM(
CASE WHEN col_1 = true
THEN 1 ELSE 0 END)
AS col_1_true,
SUM(
CASE WHEN col_2 = true
THEN 1 ELSE 0 END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
GROUP BY table2.ID
不能提供適當的輸出。 它的輸出是:
Row col_1_true col_2_true
1 1 1
2 0 1
3 0 0
4 1 0
5 1 0
我在想可能需要引入子查詢和/或子表,但是不確定如何進行。
在tsql中,它將類似於:
SELECT
COUNT(DISTINCT
CASE WHEN col_1 = true
THEN table2.ID END)
AS col_1_true,
COUNT(DISTINCT
CASE WHEN col_2 = true
THEN table2.ID END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.