You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL分组数据时如何不显示包含NULL值的行?

解决MySQL部门员工薪资统计问题

你的原SQL逻辑存在错误,导致薪资统计列出现NULL值——核心问题是在GROUP BY后直接用IF判断单行salary值关联COUNT(*),这会取组内任意一条员工的薪资,要么返回整个部门的总人数,要么返回NULL,根本没统计到符合薪资条件的员工数量。

正确的查询语句

可以用两种方式实现准确统计:

方式1:使用COUNT()结合CASE WHEN

SELECT 
  department_id,
  COUNT(*) AS total_employees,
  COUNT(CASE WHEN salary > 6000 THEN 1 END) AS high_salary_count
FROM employees 
WHERE department_id IS NOT NULL
GROUP BY department_id
-- 若需过滤掉无薪资>6000员工的部门,添加以下HAVING子句
HAVING high_salary_count > 0;

方式2:使用SUM()结合IF()

SELECT 
  department_id,
  COUNT(*) AS total_employees,
  SUM(IF(salary > 6000, 1, 0)) AS high_salary_count
FROM employees 
WHERE department_id IS NOT NULL
GROUP BY department_id
-- 若需过滤掉无薪资>6000员工的部门,添加以下HAVING子句
HAVING high_salary_count > 0;

逻辑说明

  • COUNT(CASE WHEN ... THEN 1 END):当薪资>6000时返回1,否则返回NULL,COUNT会自动忽略NULL值,最终统计的是符合条件的员工数量。
  • SUM(IF(salary>6000,1,0)):符合薪资条件记1,不符合记0,求和后得到符合条件的人数,结果为数字,不会出现NULL。
  • 加上HAVING high_salary_count > 0可只显示存在高薪员工的部门,满足你“只显示无NULL值结果”的需求(正确统计后该列是0或正整数,不会为NULL,此处过滤的是无高薪员工的部门)。

内容的提问来源于stack exchange,提问作者gosiia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:10:22