You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL Server统计EventLog各deviceId的Type3/Type4并筛选差异项

正确的SQL Server实现方案

针对你的需求,最直接高效的实现方式是使用条件聚合分别统计两类事件的次数,再通过HAVING子句筛选计数不等的记录:

SELECT 
    deviceId,
    SUM(CASE WHEN eventType = 'eventType3' THEN 1 ELSE 0 END) AS Type3,
    SUM(CASE WHEN eventType = 'eventType4' THEN 1 ELSE 0 END) AS Type4
FROM EventLog
GROUP BY deviceId
HAVING SUM(CASE WHEN eventType = 'eventType3' THEN 1 ELSE 0 END) != SUM(CASE WHEN eventType = 'eventType4' THEN 1 ELSE 0 END);

代码说明:

  • SUM(CASE...):通过条件判断,仅当匹配目标事件类型时计1,否则计0,求和后得到对应事件的总次数。
  • GROUP BY deviceId:按设备ID分组,确保每个deviceId只返回一条统计记录。
  • HAVING子句:在分组统计完成后筛选出Type3和Type4计数不相等的记录(注意不能用WHERE,因为WHERE是分组前过滤行,无法引用聚合后的列)。

如果你的eventType是数值类型(比如直接用3、4标识),只需把语句里的字符串常量改成对应数值即可:

SELECT 
    deviceId,
    SUM(CASE WHEN eventType = 3 THEN 1 ELSE 0 END) AS Type3,
    SUM(CASE WHEN eventType = 4 THEN 1 ELSE 0 END) AS Type4
FROM EventLog
GROUP BY deviceId
HAVING SUM(CASE WHEN eventType = 3 THEN 1 ELSE 0 END) != SUM(CASE WHEN eventType = 4 THEN 1 ELSE 0 END);

内容的提问来源于stack exchange,提问作者nettwerker1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:24:21