【问题标题】:TSQL select a field i'm also countingTSQL 选择一个我也在计算的字段
【发布时间】:2013-06-22 19:59:18
【问题描述】:

我正在尝试计算字段 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”不包含在聚合或分组中的问题。 有任何想法吗?

【问题讨论】:

    标签: sql sql-server tsql join


    【解决方案1】:

    由于每个组中只有一个非NULL 值D,您可以使用MAX 或MIN 来查看该值是什么。

    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
    

    【讨论】:

    • 天哪,我从来没有想到过。比我乱七八糟的连接要好得多。谢谢!
    【解决方案2】:

    试试这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 2021-08-27
      • 2014-01-13
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多