数据库分组查询(Group by)

本文详细介绍了SQL分组查询的基本语法及应用场景,包括如何使用group by进行数据分组,结合having子句对分组后的数据进行过滤等。通过具体实例说明了在查询过程中如何正确选择查询字段以确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分组查询命令

– group by
– having

分组查询中,select后只能跟分组的字段和聚合函数

  • 查询每个班学生的最大年龄
    select classnum, max(age) from tb group by classnum;

假设有n个班,按照班级号分组后,classnum有n个,max(age)也有n个,数量相同。

select name, classnum, max(age) from tb group by classnum;

分组之后,学生姓名并不是n个,与其它几个查询列数量不符,所以出错。

  • 查询每个班中男女生的最大年龄
    select class, sex,max(age) from tb group by class, sex;

  • 查询每个班中男女生的平局年龄,且平均年龄大于15岁
    selcet class, sex , avg(age) from tb group by class, sex having avg(age) > 15;

分组查询的语句顺序:
select  
...
from
...
where 
...
group by
...
having
...
order by
...

having是分组数据进行过滤,可以使用分组j聚合函数。where是对查询数据进行过滤,不能使用分组聚合函数。

DM数据库中的分组查询group by)用于将结果按照指定的列进行分组,并对每个组进行聚合计算。引用中提到了在使用group by语句时的一些注意事项,包括: 1. 分组列必须明确地命名属于from子句中命名的表的一列。 2. 分组列不能是集函数表达式或在select子句中定义的别名。 3. 当分组列值包含空值时,空值会作为一个独立的组。 4. 当分组列包含多个列名时,按照group by子句中列出现的顺序进行分组。 5. group by子句中至多可以包含255个分组列。 6. ROLLUP、CUBE、GROUPING SETS的组合不能超过9个。 另外,引用中提到了COMPATIBLE_MODE参数,它表示兼容模式的设置。DM数据库支持多种兼容模式,如SQL92标准、ORACLE、MS SQL SERVER、MYSQL等。不同的兼容模式在语法和行为上可能会有差异。 在DM数据库中进行分组查询时,需要根据上述注意事项来编写正确的语句。如果出现“不是GROUP BY表达式”的错误,可以尝试使用hint参数来指示查询优化器使用特定的分组方式,如在select语句中加上 /* GROUP_OPT_FLAG(1) */ 来进行提示。 总结起来,DM数据库中的分组查询group by)是将结果按照指定的列进行分组,并对每个组进行聚合计算。在使用group by时需要注意分组列的命名、类型以及一些限制条件,同时可以根据需要设置兼容模式和使用hint参数来优化查询。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [达梦数据库(DM8),GROUP BY 表达式报错解决办法](https://blog.youkuaiyun.com/zccmp20/article/details/114281686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [达梦数据库SQL查询报错不是 GROUP BY 表达式解决方法](https://blog.youkuaiyun.com/qq_37898570/article/details/126951104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值