簡體   English   中英

SQL:根據其他列中的多個條件計算一列中的不同值

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

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