SQL分组查询:分组合计与总计解析

0 下载量 127 浏览量 更新于2024-08-29 收藏 326KB PDF 举报
本文主要介绍了在SQL中进行分组后如何获取分组合计以及总计的各种方法,包括一次性得到分组合计和总计、分组合计的不同实现方式,以及统计分组后的种类数。通过实例展示了如何在分组基础上进行进一步的聚合操作。 1. 一次性得到分组合计和总计: 使用`GROUP BY`语句对特定字段进行分组,然后使用`COMPUTE SUM`函数计算每个分组的总和,同时得到所有数据的总计。例如: ```sql SELECT 分组字段 FROM 表 GROUP BY 分组字段 COMPUTE SUM(COUNT(*)) ``` 这将返回每个分组的数量以及整个表的总数。 2. 分组合计1: 通过嵌套查询来获取每个分组的计数。首先对分组字段进行分组,然后在外层查询中计算这些分组的总数。例如: ```sql SELECT COUNT(*) FROM ( SELECT 分组字段 FROM 表 GROUP BY 分组字段 ) 别名 ``` 3. 分组合计2: 如果需要去除重复项,可以使用`DISTINCT`关键字。这会计算不同分组字段值的个数: ```sql SELECT COUNT(*) FROM ( SELECT DISTINCT 分组字段 FROM 表 ) 别名 ``` 4. 统计分组后的种类数: 统计分组后的种类数通常意味着计算分组字段的不同值的数量。这可以通过去除重复的分组字段值并计算它们的个数来实现,与分组合计2的方法相似。 5. 示例1:分组合计并过滤: 在这个例子中,先根据`JSSKQK_JGH`进行分组,并应用条件`(SUM(JSSKQK_SSKCXS1) / 40) > 5`,筛选出符合条件的记录。然后,外部查询计算满足条件的分组数量。 ```sql SELECT COUNT(*) FROM ( SELECT JSSKQK_JGH FROM SJ_JSSKQK WHERE JSSKQK_JGH IN ( SELECT JSJBXX_JGH FROM SJ_JSJBXX WHERE JSJBXX_JSLXM1 = 1 ) GROUP BY JSSKQK_JGH HAVING ((SUM(JSSKQK_SSKCXS1) / 40) > 5) ) t ``` 6. 示例2:获取分组后最大日期的记录: 这个问题是在分组`A`的基础上找出每个组内`B`列的最大值。有两种方法可以实现: - 方法1: ```sql SELECT * FROM A out WHERE (A, B) IN ( SELECT A, MAX(B) FROM A GROUP BY A ) ``` - 方法2: ```sql SELECT * FROM ( SELECT A, ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) AS rn FROM A ) t WHERE t.rn = 1 ``` 这些SQL技巧在处理大量数据时非常有用,尤其是在分析和汇总数据时。掌握这些方法能够帮助数据库开发者更高效地编写查询,获取所需信息。
weixin_38513565
  • 粉丝: 4
  • 资源: 899
上传资源 快速赚钱

最新资源