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

PostgreSQL多对多关系折叠:查询人员职位(唯一/多职位替换)

PostgreSQL 查询:根据人员职位数量返回对应结果

需求说明

现有三张表:people(人员表)、jobs(职位表)、people_to_jobs(人员-职位多对多关联表),需要编写查询语句实现:为每位人员返回其职位信息,若仅拥有唯一职位则显示该职位名称,若有多个职位则显示多个职位。

表结构

people 表

person_idperson_name
1Jack
2Sarah
3George

jobs 表

job_idjob_name
1Accounting
2Sales
3Research

people_to_jobs 表

person_idjob_id
11
21
22
23
33

解决方案

可以通过分组统计职位数量,结合 CASE 条件判断来实现需求,SQL 语句如下:

SELECT
    p.person_id,
    p.person_name,
    CASE
        WHEN COUNT(pj.job_id) = 1 THEN MAX(j.job_name)
        ELSE '多个职位'
    END AS job_name
FROM people p
LEFT JOIN people_to_jobs pj ON p.person_id = pj.person_id
LEFT JOIN jobs j ON pj.job_id = j.job_id
GROUP BY p.person_id, p.person_name;

语句说明

  1. 关联表:通过 LEFT JOIN 将人员表与关联表、职位表关联,确保所有人员都能被查询到;
  2. 分组统计:按人员的 person_id 和 person_name 分组,用 COUNT(pj.job_id) 统计每个人员的职位数量;
  3. 条件判断:
    • 若职位数量为1,用 MAX(j.job_name) 获取唯一的职位名称(因分组后仅一条职位记录,MAX/ MIN/ SUM 均可);
    • 若职位数量大于1,直接返回多个职位。

查询结果

person_idperson_namejob_name
1JackAccounting
2Sarah多个职位
3GeorgeResearch

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:32