当前位置: 首页 > news >正文

数据库sql语句 中 GROUP BY 关键字详解及字段要求

GROUP BY 关键字详解及字段要求

在这里插入图片描述

GROUP BY 的核心作用

将查询结果按指定字段分组,常与聚合函数(如 COUNT, SUM, AVG 等)结合使用,对分组后的数据进行统计计算。


GROUP BY 后字段的要求
  1. 非聚合字段必须出现在 GROUP BY 子句中(标准 SQL 要求):

    • 如果 SELECT 中包含非聚合字段(如 name, department),这些字段必须出现在 GROUP BY 子句中,否则会报错。
    • 例外:某些数据库(如 MySQL)在非严格模式下允许省略,但结果可能不可预测。
    -- 正确示例(标准 SQL)
    SELECT department, AVG(salary) 
    FROM employees 
    GROUP BY department;-- 错误示例(未包含非聚合字段)
    SELECT department, name, AVG(salary) 
    FROM employees 
    GROUP BY department;  -- name 未在 GROUP BY 中,会报错(标准 SQL)
    
  2. 分组字段可以是多个

    SELECT department, position, COUNT(*) 
    FROM employees 
    GROUP BY department, position;
    
  3. 支持表达式或别名

    SELECT CONCAT(first_name, ' ', last_name) AS full_name,COUNT(*) 
    FROM users 
    GROUP BY full_name;  -- 可以使用别名
    
  4. 与聚合函数的配合

    • 每个非聚合字段代表分组的唯一标识,聚合函数对组内数据计算。
    SELECT department, SUM(salary) AS total_salary 
    FROM employees 
    GROUP BY department;
    

GROUP BY 的执行流程
  1. 分组:根据 GROUP BY 字段将数据划分为多个组。
  2. 聚合计算:对每个组应用聚合函数(如 COUNT, SUM)。
  3. 结果输出:每组返回一行,包含分组字段和聚合结果。

注意事项
  • 排序:默认不保证分组后的顺序,需配合 ORDER BY 明确排序规则。
  • HAVING 过滤:通过 HAVING 子句对分组后的结果进行条件过滤。
    SELECT department, AVG(salary) 
    FROM employees 
    GROUP BY department 
    HAVING AVG(salary) > 5000;
    

常见错误场景
  • 字段未在 GROUP BY 中(标准 SQL 报错):

    SELECT department, name, AVG(salary) 
    FROM employees 
    GROUP BY department;  -- name 未分组,标准 SQL 报错
    
  • 多字段分组逻辑不清

    -- 错误:若需按 department 和 position 分组,需同时指定
    SELECT department, position, COUNT(*) 
    FROM employees 
    GROUP BY department;  -- 仅按 department 分组,position 未参与分组
    

不同数据库的兼容性
  • MySQL/PostgreSQL

    • MySQL 在严格模式(ONLY_FULL_GROUP_BY)下强制要求非聚合字段在 GROUP BY 中。
    • PostgreSQL 默认严格遵循标准 SQL 规则。
  • Oracle

    • 允许 GROUP BY 子句字段与 SELECT 列不完全匹配,但结果可能不可预测。

根据你的数据库类型,需调整 SQL 语法以符合其规范。

http://www.xdnf.cn/news/76357.html

相关文章:

  • Nacos 2.0.2 在 CentOS 7 上开启权限认证(含 Docker Compose 配置与接口示例)
  • 在Windows上签名苹果APP介绍 - 附CSDN下载地址
  • 卷积神经网络基础(四)
  • 【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法)
  • Trino分布式 SQL 查询引擎
  • android contentProvider 踩坑日记
  • 分布式之易混淆概念
  • docker 里面没有 wget 也 install 不了
  • Python爬虫实战:获取xie程网近两周长沙飞敦煌机票数据,为51出行做参考
  • Oracle--SQL事务操作与管理流程
  • XSS的应用
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月22日第60弹
  • 并发设计模式实战系列(3):工作队列
  • go语言八股文
  • 滴滴-golang后端开发-企业事业部门-二面
  • C语言文件操作完全手册:读写·定位·实战
  • Codeforces Round 1019 (Div. 2)
  • Qt -对象树
  • 极狐GitLab 中如何自定义角色?
  • 时序数据库IoTDB与OpenTSDB的对比分析
  • 理解字符设备、设备模型与子系统:以 i.MX8MP 平台为例
  • [U-Net-Dual]DEU-Net
  • 【上海大学数据库原理实验报告】MySQL数据库的C/S模式部署
  • WebRTC服务器Coturn服务器相关测试工具
  • 什么事Nginx,及使用Nginx部署vue项目(非服务器Nginx压缩包版)
  • 力扣2685(dfs)
  • 桌面我的电脑图标不见了怎么恢复 恢复方法指南
  • docker保存镜像到本地
  • 懒人一键搭建符号执行环境V5K3
  • 【VS Code】打开远程服务器Docker项目或文件夹