簡體   English   中英

帶條件的SQL計數唯一ID

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

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