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

如何在多表关联的COUNT查询中用CASE语句新增工资统计列?

解决方法:用CASE表达式实现条件计数,避免重复关联

没问题,你完全可以用CASE表达式配合聚合函数来实现这个需求,不用重复关联三张表,这样既简洁又高效。

直接修改你原有的SQL语句,新增email_PLA列即可:

SELECT 
    avg_salary.id,
    COUNT(CASE WHEN person.salary::numeric > avg_salary.avg THEN emails.message_from END) AS email_PGA,
    COUNT(CASE WHEN person.salary::numeric < avg_salary.avg THEN emails.message_from END) AS email_PLA
FROM avg_salary, person, emails 
WHERE 
    person.works_in = avg_salary.id 
    AND person.email_address = emails.message_from 
GROUP BY avg_salary.id

原理说明:

  • CASE WHEN会根据条件返回对应值:当工资大于平均时,返回emails.message_from(非NULL值),否则返回NULL;COUNT()函数会自动忽略NULL值,这样就精准统计出了符合条件的邮件数量。
  • 你也可以用SUM()替代COUNT(),写法是SUM(CASE WHEN ... THEN 1 ELSE 0 END),效果完全一致,看你个人书写习惯选择就行。
  • 另外建议把老式的逗号关联写法改成JOIN语法,可读性会更好,优化后的写法如下:
SELECT 
    a.id,
    COUNT(CASE WHEN p.salary::numeric > a.avg THEN e.message_from END) AS email_PGA,
    COUNT(CASE WHEN p.salary::numeric < a.avg THEN e.message_from END) AS email_PLA
FROM avg_salary a
JOIN person p ON p.works_in = a.id
JOIN emails e ON p.email_address = e.message_from
GROUP BY a.id

这样代码结构更清晰,也符合现代SQL的书写规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:03