sql - 我正在尝试对多个条件进行计数并将它们作为单独的列返回
问题描述
SELECT * FROM
(SELECT COUNT("user_job".id) FROM "user_job" WHERE "user".job_title = 'Welder / Fitter') AS
"WelderFitters"
(SELECT COUNT("user_job".id) AS "Welders" FROM "user_job" WHERE "user".job_title =
'Welder')
(SELECT COUNT("user_job".id) AS "Fitters" FROM "user_job" WHERE "user".job_title =
'Fitter')
(SELECT COUNT("user_job".id) AS "Helpers" FROM "user_job" WHERE "user".job_title =
'Helper')
JOIN "user" ON "user".id = "user_job".user_id
JOIN "job" ON "job".id = "user_job".job_id
WHERE "job".id = 22;
//涉及两个连接。这根本不起作用,但我认为它说明了我正在尝试做的事情。
解决方案
我认为你想要条件聚合。您的示例查询建议如下:
SELECT COUNT(*) FILTER (WHERE u.job_title = 'Welder / Fitter') AS
"WelderFitters",
COUNT(*) FILTER (WHERE u.job_title = 'Welder') AS
"Welders",
COUNT(*) FILTER (WHERE u.job_title = 'Fitter') AS "Fitters",
COUNT(*) FILTER (WHERE u.job_title = 'Helper') AS "Helpers"
FROM "user" u JOIN
"user_job" uj
ON u.id = uj.user_id JOIN
"job" j
ON j.id = uj.job_id
WHERE j.id = 2;
但是,我不确定是否job_title
真的在users
表中。它似乎更有可能在jobs
表中。
推荐阅读
- scala - 以更好的方式实现 else-if scala 语句
- c# - 使用 azure appsettings 在 azure webjob 中读取 EventHubTrigger 的连接字符串
- c# - 如何在选择中加入多个表(Ef core)?
- sql - N:M 用户和客人之间的关系
- sparql - SPARQL - 如果不存在则插入属性
- bash - bash 使用 less 来检查终端屏幕顶部的 bash_aliases 假脱机
- javascript - gulp 手表的问题
- javascript - 在 JQuery 中按类从父级获取元素的更好方法
- firebase - 每次页面重新启动时,Firebase.auth().currentUser 都会变为 null
- python - 可以轻松计算字典列表吗?