在我的輸出中,我根據條件得到了兩個計數值。
SELECT count(distinct sc.staff),
count(distinct sc.subgroupId)
FROM schedules sc
WHERE EXISTS (SELECT *
FROM schedulegroup sg
WHERE sg.groupid = 15
AND sc.subgroupId = sg.subgroup
AND sg.created BETWEEN '2022-06-01' AND '2022-06-12'
AND sc.status IN(1,2)
)
現在我根據狀態條件(狀態 = 1 和 2)得到了結果。但是我需要一列總計數而不檢查狀態條件。如何獲取現有查詢中的總記錄數。
任何人都請幫助我。在此先感謝
uj5u.com熱心網友回復:
然后結束時使用計數與大小寫的組合。
SELECT count(distinct case when sc.status in (1, 2) then sc.staff end),
count(distinct case when sc.status in (1, 2) then sc.subgroupId end),
count(sc.id)
FROM schedules sc
WHERE EXISTS (SELECT *
FROM schedulegroup sg
WHERE sg.groupid = 15
AND sc.subgroupId = sg.subgroup
AND sg.created BETWEEN '2022-06-01' AND '2022-06-12')
這是一個小演示
uj5u.com熱心網友回復:
如果我對您的理解正確,您想為每個選擇現有資料schedule,并status為每個選擇匹配schedulegroup行的總數(即沒有過濾器) schedule。
如果是這樣,應該這樣做:
SELECT count(distinct sc.staff),
count(distinct sc.subgroupId),
count(
SELECT *
FROM schedulegroup sg
WHERE sg.groupid = 15
AND sc.subgroupId = sg.subgroup
AND sg.created BETWEEN '2022-06-01' AND '2022-06-12'
)
FROM schedules sc
WHERE EXISTS (SELECT *
FROM schedulegroup sg
WHERE sg.groupid = 15
AND sc.subgroupId = sg.subgroup
AND sg.created BETWEEN '2022-06-01' AND '2022-06-12'
AND sc.status IN(1,2)
)
或者您是否要添加未status過濾的count(distinct sc.staff)and count(distinct sc.subgroupId),而不僅僅是行數?如果是這樣,您可以復制上面的新子查詢并為每個count(distinct ...)要回傳的子查詢進行修改。
您可以使用公用表運算式或用戶定義的函式使這個更清晰(重復性更少)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486976.html
標籤:sql PostgreSQL
上一篇:使用大量連接優化此MSSQL查詢
下一篇:178.排名分數
