sql - TSQL 选择一个我也在计算的字段

标签 sql sql-server tsql join

我正在尝试计算字段 D 中不同值的数量,按字段 A、B 和 C 分组。如果计数返回 1,我想知道 D 的值是多少。

例如:

SELECT A, B, C, COUNT(D) AS D_COUNT
FROM EXAMPLE_TABLE
GROUP BY A, B, C
HAVING COUNT(D) = 1

自从我完成 SQL 以来已经有一段时间了,我一直在研究这个问题,我相信我可能忽略了一些非常简单和明显的东西。例如,我尝试过多次连接到同一个表,但我一直遇到“D”不包含在聚合或分组中的问题。 有任何想法吗?

最佳答案

由于在每一组中 D 都有一个非 NULL 值,因此您可以只使用 MAXMIN 以查看该值是什么。

SELECT A,
       B,
       C,
       COUNT(D) AS D_COUNT,
       MAX(D)   AS D
FROM   EXAMPLE_TABLE
GROUP  BY A,
          B,
          C
HAVING COUNT(D) = 1 

对这个适用于 COUNT(D) = @N 的问题的更一般的回答是使用窗口聚合。例如

;WITH T
     AS (SELECT A,
                B,
                C,
                D,
                COUNT(D) OVER (PARTITION BY A, B, C) AS D_COUNT
         FROM   EXAMPLE_TABLE)
SELECT *
FROM   T
WHERE  D_COUNT = @N

关于sql - TSQL 选择一个我也在计算的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307206/

相关文章:

sql - 从选择查询中查询插入

MySQL 计算一列的唯一性,而其他列在 Group By 中具有单个值

sql - MS SQL Server - 使用 Case 语句从 3 条记录创建一行

java - Java 中的动态 SQL 查询

sql - 从 VARCHAR 中提取数字

对于相同查询,Python3 脚本未显示与 MySQL 引擎相同的结果

C# - DataTable.Merge() 是否添加重复项或更新?

sql-server - 使用 SSDT,当我的 View 引用不同数据库中的对象时,如何解决 SQL71561 错误?

sql-server - 在T-SQL中,更新父表和子表的语句是否可能死锁?

tsql - 将 GUID 参数添加到 sql 字符串