GROUP BY 是 SQL 中用来“按列分组”的子句

它把相同值的行分到同一个组,然后通常配合聚合函数COUNT, SUM, AVG, MAX, MIN 等)对每个组做统计,最终每组只返回一行结果。


✅ 1. 基本语法

SELECT1,2, 聚合函数(3)
FROM 表名
GROUP BY1,2;
  • 规则SELECT 后面出现的非聚合列,必须全部出现在 GROUP BY 中。
    SELECT name, age, COUNT(*) FROM emp GROUP BY name;(错误,age 没分组)
    SELECT name, age, COUNT(*) FROM emp GROUP BY name, age;

✅ 2. 工作流程(3 步)

  1. 按 GROUP BY 列的值分组
  2. 把每组内的行聚合(用聚合函数)
  3. 每组返回一行结果

✅ 3. 示例表:sales

order_idregionproductamount
1华北苹果100
2华北苹果200
3华南苹果150
4华南香蕉80

🔍 按 region 分组,统计销售额

SELECT region,SUM(amount) AS total_sales
FROM sales
GROUP BY region;

结果:

region | total_sales
-------|------------
华北   | 300
华南   | 230

🔍 按 region + product 分组,统计订单数

SELECT region,product,COUNT(*) AS order_cnt
FROM sales
GROUP BY region, product;

结果:

region | product | order_cnt
-------|---------|----------
华北   | 苹果    | 2
华南   | 苹果    | 1
华南   | 香蕉    | 1

✅ 4. 常见搭配

搭配作用示例
GROUP BY + HAVING对聚合结果再过滤HAVING SUM(amount) > 200
GROUP BY + ORDER BY对分组结果排序ORDER BY total_sales DESC
GROUP BY + 多列更细粒度分组GROUP BY region, product

✅ 5. 易错点

  • SELECT 里写了列,却没写进 GROUP BY → 报错(MySQL 除外,它有宽松模式)。
  • WHEREHAVING 的区别:
    • WHERE:在分组前过滤原始行
    • HAVING:在分组后过滤聚合结果

✅ 6. 一句话总结

GROUP BY 就是“把相同值的行捆成一组,然后对每组做统计”,是 SQL 里做报表、汇总、统计的核心工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91813.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91813.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91813.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI Agent开发学习系列 - LangGraph(10): 带有循环的Looping Graph(练习解答)

在AI Agent开发学习系列 - LangGraph(9): 带有循环的Looping Graph中,我们学习了如何创建带有循环的Looping Graph。为了巩固学习,我们来做一个练习。 用LangGraph创建如下图的一个Agent: 要求: 输入玩家姓名通过输入的上限值和下限值之间…

【保姆级 - 大模型应用开发】DeepSeek R1 本地部署全攻略:Ollama + vLLM + PyTorch 多选方案

DeepSeek R1 本地部署全攻略:Ollama vLLM PyTorch 多选方案 想部署 DeepSeek-R1 模型到本地,开启高性能推理体验?本文汇总了 Ollama、vLLM 及原生 PyTorch 的部署方法,适合不同开发者需求。 🎯 下载模型 (必做) ----…

使用 Vive Tracker 替代 T265 实现位姿获取(基于 Ubuntu + SteamVR)

在Dexcap这篇工作列出第二版硬件清单时,我注意到其使用 Vive Tracker 替代 Intel T265 来获取位姿数据,对这个东西的性能感到好奇,最近因为需要跟进相关工作,参与了一部分实现,由于这方面的中文资料相对较少&#xff0…

博物馆 VR 导览:图形渲染算法+智能讲解技术算法实现及优化

本文面向博物馆数字化开发技术员、VR 系统工程师等技术同仁们,聚焦图形渲染算法在博物馆 VR 导览中的核心应用,解决虚拟展馆还原精度不足、多终端适配卡顿、智能讲解触发延迟等实际技术问题。如有项目合作及技术交流欢迎私信作者~一、VR导览技术痛点1.3D…

zset 中特殊的操作

首先 zset 与我们常规的 redis 操作有所不同, 这里的时间复杂度基本都是 O(log N) 起步的 目录 1. zcount 2. zpopmax 1. zcount zcount key min max : 这里求的是 key 中下标在 min 和 max 之间的 元素的数量, 这里是比区间 我们要是想排除端点, 就需要加上 ( , 无论是…

KSP与ASM深度对比:原理、性能与使用场景

一、核心目的差异1. KSP(Kotlin Symbol Processing)核心目的:在编译时生成新代码,解决样板代码问题(操作对象:.kt源文件编译过程中的中间表示)主要场景:自动生成DI(依赖注入)配置代码创建路由映…

【LLM】如何在Cursor中调用Dify工作流

这篇文章将通过一个接口文档知识库示例,带你了解如何在 Cursor 中通过 Mcp Server 调用 Dify 平台配置的工作流。 1. 准备工作 需要准备文本生成模型、向量模型、Rerank 模型(可选),这些都可以在 阿里云百炼平台 申请免费使用额度…

L1、L2正则化的几何解释

L2正则化: 图中用几何方式形象地解释了 Ridge 回归(L2正则化)的原理。 ① 阴影圆:可以理解为(w1^2 w2^2)​≤R^2,圆周表示目标函数的约束线,这个圆表示了我们的参数 (w1,w2)可以活动的范围。 …

【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战

第1章 并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU给每个线程分配CPU时间片实现多线程,而每个时间片一般是几十毫秒,所以多个线程感觉是同时执行的 但同一个核切换线程执行时会保存运行状态,以便下次…

leecode3 无重复元素的最长子串

我的思路 原始代码 我发现我虽然解决问题了,但是我的思路不简洁,不明白。 这个题本质上还是滑动窗口的问题。 具体思路为先定义两个指针,对应滑动窗口的两个边界关键是:定义一个集合,来判断这个窗口中的元素是否存在重…

【嵌入式汇编基础】-ARM架构基础(三)

ARM架构基础(三) 文章目录 ARM架构基础(三) 7、AArch64 执行状态 7.3 程序计数器 7.4 堆栈指针 7.5 零寄存器 7.6 链接寄存器 7.7 帧指针 7.8 平台寄存器 (x18) 7.9 过程内调用寄存器 7.10 SIMD 和浮点寄存器 7.11 系统寄存器 7.13 PSTATE 7、AArch64 执行状态 7.3 程序计…

[buuctf-misc]喵喵喵

m题目在线评测BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#%E5%96%B5%E5%96%B5%E5%96%B5BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.…

Vue 详情模块 2

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:详情基础内容,日期及电影描述 目录 详情 详情基础内容 初始化与赋值 渲染基础内容 详情样式 日期处理 安装moment 定义过滤器 使用过滤器 电影描述 总结 详情 详情基础内容 初始化与赋值 …

【MODIS数据】MYD03

🌍 遥感数据的“导航仪”:深入解析MYD03地理定位产品 在卫星遥感领域,精确的地理定位是数据应用的基础。作为Aqua卫星中分辨率成像光谱仪(MODIS)的核心支撑产品,MYD03虽不如地表温度或植被指数产品知名&am…

如何填写PDF表格的例子

实际应用场景中,我们会遇到需要根据会话内容自动填写表格的情况,比如:pdf 表格。假设根据会话内容已经获得相关信息,下面以填写个人信息为例来说明。个人信息表格.pdf填写后的效果:填写代码如下:from pdfrw…

2023年影响重大的网络安全典型案例

以下是2023年影响重大的网络安全典型案例,按时间顺序梳理事件经过及技术细节:---一、DeFi协议攻击:dForce借贷协议遭入侵(2023年4月)** - 时间线: - 4月19日08:58:黑客开始攻击Lendf.Me合约&…

Vue 响应式基础全解析2

DOM更新时机 修改响应式状态后,DOM更新不是同步的。Vue会缓冲所有修改,在"next tick"周期中统一更新,确保每个组件只更新一次。 如需在DOM更新后执行代码,可使用nextTick(): import {nextTick } from vueasync function increment() {count.value++

【黑马SpringCloud微服务开发与实战】(九)elasticsearch基础

1. 认识elasticsearch2. 认识和安装ES主播这里之前已经安装好了,资料包里面有镜像 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugin…

由浅入深地讲清楚浏览器缓存

一、什么是浏览器缓存?(入门级) 1. 浏览器缓存的定义浏览器缓存就是:浏览器把之前请求过的资源保存起来,下次访问同样的资源时可以直接用本地副本,而不是重新请求服务器。举个生活例子: 你第一次…

Linux I/O 多路复用机制对比分析:poll/ppoll/epoll/select

Linux I/O 多路复用机制对比分析:poll/ppoll/epoll/select 1. 概述 I/O 多路复用是现代高性能网络编程的核心技术,它允许单个线程同时监视多个文件描述符的状态变化,从而实现高效的并发处理。Linux 提供了多种 I/O 多路复用机制&#xff0c…