COUNT(*)统计所有行(含NULL),COUNT(字段)跳过NULL;GROUP BY需与SELECT非聚合字段一致;WHERE过滤行,HAVING过滤分组结果;状态字段需规范类型与值以保证分组精度。count(*) 和 count(字段) 在统计状态时结果可能不同直接写 SELECT status, COUNT(*) FROM orders GROUP BY status 是最常用做法,但要注意:如果 status 字段允许为 NULL,COUNT(status) 会跳过这些行,而 COUNT(*) 不会。实际业务里,"未设置状态"常被存为 NULL,这时用 COUNT(*) 才能体现"这一组有多少条记录",而不是"有多少条非空状态记录"。常见错误现象:COUNT(status) 返回 0 条,但肉眼可见表里有几十条 status IS NULL 的数据。统计总数(含 NULL)→ 用 COUNT(*)只统计明确赋值的状态 → 用 COUNT(status),但得先确认业务是否真要排除 NULL想把 NULL 单独归为一类统计?加 COALESCE(status, 'unknown') 再分组GROUP BY 后没选非聚合字段会报错(ONLY_FULL_GROUP_BY)MySQL 5.7+ 默认开启 ONLY_FULL_GROUP_BY 模式,如果写 SELECT id, status, COUNT(*) FROM orders GROUP BY status,会直接报错:Expression #1 of SELECT list is not in GROUP BY clause。这不是语法错,是 SQL 标准强制要求:SELECT 中每个非聚合字段都必须出现在 GROUP BY 里。使用场景:你想看每个状态对应的第一条订单 ID?那得用子查询或窗口函数,不能靠 GROUP BY 硬拖。只想看状态和数量 → 只写 SELECT status, COUNT(*)需要关联其他字段(比如最新创建时间)→ 改用 MAX(created_at) 这类聚合函数真要取某一行完整数据 → 别硬套 GROUP BY,考虑 ROW_NUMBER() OVER (PARTITION BY status ORDER BY created_at DESC)状态字段类型影响分组精度(字符串 vs 枚举 vs 数字)如果 status 是 VARCHAR 类型,但值里混着空格、大小写不一致(比如 'pending' 和 'Pending'),GROUP BY 会当成两个不同状态。数字型状态(如 0/1/2)看似安全,但如果前端传参没校验,可能存进字符串 '1 '(带空格),同样导致重复分组。 HIX.AI HIX.AI是一个多功能的一体化AI写作助手,集成了120多种AI写作工具,支持50多种语言,能够满足各种写作需求。
相关推荐
一次旅行1 分钟前
AutoAWQ完整实战:MIT激活感知AWQ量化,模型显存减半、推理提速且精度无损踏着七彩祥云的小丑4 分钟前
忘记Redis是否安装过时查看GrowthDiary00722 分钟前
算法题:寻找二维数组top k问题丙氨酸長鏈1 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit APINontee1 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛旋生万物1 小时前
电磁力 = 螺旋联络的 90° 旋转?麦克斯韦方程组的几何重构眞bilibili2 小时前
带团队后的日常思考(十七)久久学姐2 小时前
【AI问答】python引入其他模块的对象laboratory agent开发2 小时前
智能体多工具串联执行中途失败,部分写入的数据如何回滚always_TT2 小时前
【Python requirements.txt 依赖管理】