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

5 下载量 79 浏览量 更新于2024-08-29 收藏 326KB PDF 举报
本文主要介绍了在SQL中进行分组后如何获取分组合计及总计的方法,提供了四个具体的SQL语句示例。这些技巧对于数据分析和报表生成等任务非常实用。 1)一次性得到分组合计和总计的SQL语句: ```sql SELECT 分组字段 FROM 表 GROUP BY 分组字段 COMPUTE SUM(COUNT(*)) ``` 在这个语句中,`GROUP BY 分组字段`将数据按照指定的字段进行分组,然后`COMPUTE SUM(COUNT(*))`计算每个组内的记录总数,并给出所有记录的总计。 2)分组合计方法1: ```sql SELECT COUNT(*) FROM (SELECT 分组字段 FROM 表 GROUP BY 分组字段) 别名 ``` 这种方法首先创建一个子查询,对原始表按分组字段分组,然后外部查询计算子查询中每个组的记录数。 3)分组合计方法2: ```sql SELECT COUNT(*) FROM (SELECT DISTINCT 分组字段 FROM 表) 别名 ``` 这种方法使用`DISTINCT`关键字去除重复的分组字段值,再计算不重复分组的数量。 4)统计分组后的种类数: ```sql SELECT COUNT(DISTINCT 分组字段) FROM 表 ``` 这将返回分组字段中不同值的数量,即分组后的种类数。 此外,文中还给出了两个实际应用的例子: 例子1: ```sql 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) ``` 此查询首先筛选满足条件的记录,然后按JSSKQK_JGH分组,通过HAVING子句筛选出满足条件的组,最后可以通过嵌套查询来计算符合条件的组数量。 例子2: 这是一个在Oracle环境中如何获取每个分组内最大日期的问题。有两个方法: ```sql -- 方法1 SELECT * FROM A out WHERE (A, MAX(B)) IN ( SELECT A, MAX(B) FROM A GROUP BY A ) -- 方法2 SELECT * FROM ( SELECT A, ROW_NUMBER() OVER (PARTITION BY A ORDER BY B DESC) as row_num FROM A ) WHERE row_num = 1 ``` 这两个方法都可以找到每个分组内B列的最大值对应的完整记录。 以上是关于分组和总计的SQL操作,它们在数据库查询中起到关键作用,能够帮助我们更有效地分析和理解数据。