MySQL8.0里GROUP BY有变化的示例分析

发布时间:2022-01-17 11:10:16 作者:柒染
来源:亿速云 阅读:177
# MySQL8.0里GROUP BY有变化的示例分析

MySQL 8.0对GROUP BY子句的处理进行了重要改进,主要涉及**SQL模式**和**功能增强**两方面。本文通过示例分析这些变化。

## 一、SQL模式默认值变化

MySQL 8.0默认启用`ONLY_FULL_GROUP_BY`模式,要求SELECT列表中的非聚合列必须出现在GROUP BY子句中:

```sql
-- 5.7版本可能允许的写法(非严格模式)
SELECT department, employee_name, COUNT(*) 
FROM employees;

-- 8.0版本必须改为
SELECT department, employee_name, COUNT(*)
FROM employees
GROUP BY department, employee_name;

二、函数依赖检测增强

8.0新增对函数依赖的智能识别。当GROUP BY包含主键或唯一键时,可以省略其他列的引用:

-- 假设employee_id是主键
SELECT employee_id, employee_name, department
FROM employees
GROUP BY employee_id;  -- 8.0允许,5.7需要GROUP BY所有列

三、ANY_VALUE()函数的应用

对于确实需要忽略的非聚合列,推荐使用ANY_VALUE():

-- 获取每个部门的任意一名员工代表
SELECT department, ANY_VALUE(employee_name), COUNT(*)
FROM employees
GROUP BY department;

四、WITH ROLLUP语法改进

GROUP BY WITH ROLLUP生成的分组统计更加规范:

SELECT department, SUM(salary)
FROM employees
GROUP BY department WITH ROLLUP;  -- 8.0优化了NULL标记的处理

注意:升级到8.0后,原有SQL可能因GROUP BY不完整而报错,可通过以下方式调整: 1. 修改SQL满足ONLY_FULL_GROUP_BY要求 2. 使用ANY_VALUE()明确意图 3. 调整sql_mode(不推荐)

这些改进促使开发者编写更规范的SQL,同时提供了更灵活的聚合操作方式。 “`

推荐阅读:
  1. MySQL8.0新特性--Group by
  2. Define A Host Group的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql group by

上一篇:如何使用java实现快速排序

下一篇:Python怎么实现自动化发送邮件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》