[英]SQL: Count distinct values from one column based on multiple criteria in other columns
我試圖根據多個標准計算不同的值。 樣本數據練習包括在下面。
Table1 ╔════════╦════════╦══════╗ ║ Bug ID ║ Status ║ Test ║ ╠════════╬════════╬══════╣ ║ 1 ║ Open ║ w ║ ║ 2 ║ Closed ║ w ║ ║ 3 ║ Open ║ w ║ ║ 4 ║ Open ║ x ║ ║ 4 ║ Open ║ x ║ ║ 5 ║ Closed ║ x ║ ║ 5 ║ Closed ║ x ║ ║ 5 ║ Closed ║ y ║ ║ 6 ║ Open ║ z ║ ║ 6 ║ Open ║ z ║ ║ 6 ║ Open ║ z ║ ║ 7 ║ Closed ║ z ║ ║ 8 ║ Closed ║ z ║ ╚════════╩════════╩══════╝ Desired Query Results ╔══════╦═══════════╦════════════╗ ║ Test ║ Open Bugs ║ Total Bugs ║ ╠══════╬═══════════╬════════════╣ ║ w ║ 2 ║ 3 ║ ║ x ║ 1 ║ 2 ║ ║ y ║ 0 ║ 1 ║ ║ z ║ 1 ║ 3 ║ ╚══════╩═══════════╩════════════╝
給定的Bug可以在多個測試中找到,多次用於相同的測試(例如:6)或兩者(例如:5)。
以下查詢可以正常傳遞'Total Bugs'
SELECT
Test,
COUNT(DISTINCT Bug ID) AS "Total Bugs"
FROM
Table1
GROUP BY Test
我的研究讓我對以下查詢進行了修改。 他們錯過了明顯的錯誤,因此返回“Open Bugs”列的錯誤結果(顯示在查詢下方)
SELECT
Test,
SUM(CASE WHEN Status <> 'Closed' THEN 1 ELSE 0 END) AS "Open Bugs"
FROM
Table1
GROUP BY Test
╔══════╦═══════════╗ ║ Test ║ Open Bugs ║ ╠══════╬═══════════╣ ║ w ║ 2 ║ ║ x ║ 2 ║ ║ y ║ 0 ║ ║ z ║ 3 ║ ╚══════╩═══════════╝
當然,我的最終結果必須在一個表中提供兩個計數列(而不是像我為演示目的那樣使用單獨的查詢)。
我不想依賴多個子查詢,因為我的實例將有兩個以上的列,其中包含來自同一個表但各種標准的計數。
我正在使用SQL Server(不確定發布)。
任何幫助是極大的贊賞。
您可以使用以下代碼進行條件count(distinct)
:
SELECT Test, COUNT(DISTINCT "Bug ID") AS "Total Bugs",
count(distinct (CASE WHEN "Status" <> 'Closed' THEN "Bug ID" END)) as "Open Bugs"
FROM Table1
GROUP BY Test
case
陳述檢查條件。 如果為true,則返回Bug ID
。 如果不存在,則默認為NULL,因此不會計算id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.