【问题标题】:MSSQL Aggregation QueryMSSQL 聚合查询
【发布时间】:2022-08-17 00:33:58
【问题描述】:

我有一个名为 EventLog 的表,如下所示: EventLog Table

我想显示每个 deviceId 的每个事件类型的计数,如下所示: Aggregated Table

然后,最终只显示 type3 计数和 type4 计数不同的设备: Different Counts Only

我知道我需要使用 COUNT 和 GROUP BY 以及可能的嵌套 SELECT?

我试过了:

SELECT deviceId, min(eventType) as [Type3], max(eventType) as [Type4]
FROM EventLogWHERE eventType IN (3,4)
GROUP BY deviceId;

但这只是给了我每个 deviceID 的最小值和最大值,而不是计算类型 3 和类型 4 eventTypes 的出现次数。我无法弄清楚如何将 eventType 值拆分为它们自己的列。

我也试过:

SELECT deviceId, count(eventType)
FROM eventLog
WHERE eventType = 3
GROUP BY deviceId;

但是(显然)只返回 eventType 3 的每个 deviceId 的计数 - 我需要一个 eventType 3 的列和一个 eventType4 的列。

    标签: sql sql-server database


    【解决方案1】:

    您可以对您的选择中的案例进行求和,并在这些总和不匹配的情况下进行过滤。

    SELECT 
        deviceId, 
        SUM(CASE WHEN eventType = 3 THEN 1 ELSE 0 END) as type3Count,
        SUM(CASE WHEN eventType = 4 THEN 1 ELSE 0 END) as type4Count,
    FROM 
        eventLog
    WHERE 
        eventType IN(3,4)
    GROUP BY 
        deviceId
    HAVING
        SUM(CASE WHEN eventType = 4 THEN 1 ELSE 0 END) = SUM(CASE WHEN eventType = 3 THEN 1 ELSE 0 END)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2013-12-06
      • 2021-09-27
      • 2014-11-26
      • 2019-05-07
      • 2018-12-18
      相关资源
      最近更新 更多