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

JOBNAME表查询字段并关联职位统计报错,求正确SQL写法

正确SQL实现需求分析

问题背景

现有表JOBNAME,结构及数据如下:

JobName
工程师Alex
工程师Frank
SDEJohn
SDEFrank
SDEMason

期望查询结果为每个员工记录后添加对应Job的总人数:

JobNameJob Count
工程师Alex2
工程师Frank2
SDEJohn3
SDEFrank3
SDEMason3

用户原SQL语句:

select job, name, count(job) as 'Job Count'
from JOBNAME
group by count(job)

错误原因

原SQL的核心错误在于GROUP BY count(job):

  • GROUP BY子句必须指定非聚合的列,不能直接使用聚合函数作为分组依据
  • 这种分组方式会丢失原始表中的job和name明细记录,无法满足保留所有员工行的需求

正确解决方案

方法1:使用窗口函数(推荐,简洁高效)

利用COUNT() OVER (PARTITION BY job)窗口函数,直接计算每个Job分组的总人数,同时保留所有原始行:

SELECT 
    job, 
    name, 
    COUNT(job) OVER (PARTITION BY job) AS `Job Count`
FROM JOBNAME;

方法2:子查询关联

先统计每个Job的总人数,再通过job字段关联回原表:

SELECT 
    j.job, 
    j.name, 
    job_counts.job_count AS `Job Count`
FROM JOBNAME j
JOIN (
    SELECT job, COUNT(*) AS job_count
    FROM JOBNAME
    GROUP BY job
) job_counts ON j.job = job_counts.job;

两种方法都能得到期望的结果,窗口函数写法更简洁,适合大多数现代数据库(如MySQL 8.0+、PostgreSQL、SQL Server等);子查询方法兼容性更强,可支持低版本数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:40:24