You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

编写SQL查询:按ID、Case分组统计数量并展示Time=1对应日期

SQL分组统计与指定字段提取解决方案

没问题,我来帮你搞定这个SQL查询需求。先把相关信息整理清楚:

原始数据集

IDcasedatetime
101A20011
101A20022
102A20011
103B20011
101B20031
101A20043
102C20061
101B20072
103C20071

需求概述

我们需要实现:

  • IDcase分组,统计每组的总记录数(命名为qty
  • 每个分组仅展示该组内time=1对应的date值(比如ID=101的A组取2001,B组取2003)

预期输出示例

IDcasedateqty
101A20013
101B20032

对应的SQL查询方案

SELECT 
    ID,
    `case`,
    MAX(CASE WHEN time = 1 THEN date END) AS date,
    COUNT(*) AS qty
FROM 
    your_table_name  -- 替换成你的实际表名
GROUP BY 
    ID, `case`
ORDER BY 
    ID, `case`;

代码细节解释

  1. 分组逻辑GROUP BY ID, \case``确保我们按ID和case的唯一组合来聚合数据,这是统计分组数量的基础。
  2. 提取目标日期MAX(CASE WHEN time = 1 THEN date END)是核心逻辑——它会在每个分组里筛选出time=1的记录,并提取对应的date值。因为每个分组里time=1的记录只会有一条(从你的数据来看),用MAX或者MIN都能得到正确结果;如果你的场景里可能有多条time=1的记录,可以根据需求调整成MIN或者其他聚合逻辑。
  3. 统计记录数COUNT(*)直接统计每个分组下的总记录条数,命名为qty
  4. 关键字处理case是SQL的保留关键字,所以用反引号()包裹避免语法错误。不同数据库的写法略有差异:SQL Server用[case],Oracle用"case"`,你可以根据自己使用的数据库调整。
  5. 排序优化ORDER BY ID, \case``让结果按ID和case排序,阅读起来更清晰。

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

火山引擎 最新活动