gpt4 book ai didi

SQL:根据其他列中的多个条件对一列中的不同值进行计数

转载 作者:行者123 更新时间:2023-12-02 17:10:14 25 4
gpt4 key购买 nike

我正在尝试根据多个条件计算不同的值。下面包含示例数据练习。

           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 ║╚══════╩═══════════╩════════════╝

A given Bug can be found in multiple Tests, multiple times for the same Test(ex: 6), or both (ex: 5).

The following query works fine to accurately deliver 'Total Bugs'

SELECT
Test,
COUNT(DISTINCT Bug ID) AS "Total Bugs"
FROM
Table1
GROUP BY Test

我的研究使我对以下查询进行了变体。他们错过了不同的错误,因此为“ Unresolved 错误”列返回了不正确的结果(显示在查询下方)

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 不会被计算在内。

关于SQL:根据其他列中的多个条件对一列中的不同值进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com