我在计数查询时遇到问题,我已经被困在这几个小时了...
所以我有3个表:
job - id,name
事件 - 身份证,姓名,日期
注册 - id,event_id,name,job_id
我想计算每个事件中每个作业有多少注册,即使是空的,我也不需要过滤事件,因为不会有很多,我只有15个工作。
我想要这样的东西:
event_id - job - count
1 - carpenter - 10
1 - miner - 0
1 - farmer - 3
2 - carpenter - 3
2 - miner - 4
2 - farmer - 0
就我而言:
SELECT signup.event_id, job.name AS "job", COUNT(*) AS "cnt"
FROM job
LEFT OUTER JOIN signup ON job.id = signup.job_id
GROUP BY job.name, signup.event_id
ORDER BY signup.event_id
返回这样的东西:
event_id - job - count
NULL - farmer - 0
NULL - miner - 0
1 - carpenter - 10
1 - farmer - 3
2 - carpenter - 3
2 - miner - 4
使用cross join
获取行,然后使用left join
/ group by
进行聚合:
SELECT e.event_id, j.name AS job, COUNT(s.id) AS cnt
FROM event e CROSS JOIN
job j LEFT OUTER JOIN
signup s
ON j.id = s.job_id AND e.id = s.event_id
GROUP BY e.event_id, j.name
ORDER BY e.event_id, j.name;