如何计算一对多

时间:2018-02-18 12:15:13

标签: sql

我有两个表格Job Category,其结构为| id | name |,另一个表格jobs的结构为| id | job_name | job_category |

如何计算每个类别中的工作数量?

3 个答案:

答案 0 :(得分:2)

select c.name, count(j.id)
from job_category c
left join jobs j on j.job_category = c.name
group by c.name

答案 1 :(得分:1)

为什么你需要加入?不是吗

select job_category, count(*)
from jobs
group by job_category

如果没有,请发布您自己的查询(可能还有一些可能有助于我们帮助您的样本数据)。

[编辑,阅读评论后]

似乎我的(过度)简化"解决方案"缺乏一些细节。是的,它显示没有工作的类别,而OP要求那些也应显示为" 0"结果是。

具有适当COUNT函数的外部联接可以解决这个问题;这是一个例子。

SQL> with job_category(id, name) as
  2    (select 1, 'categ 1' from dual union
  3     select 2, 'categ 2' from dual
  4    ),
  5  job (id, job_name, job_category) as
  6    (select 100, 'job 1', 1 from dual union
  7     select 200, 'job 2', 1 from dual
  8    )
  9  select c.name, count(j.id)
 10  from job_category c left join job j on j.job_category = c.id
 11  group by c.name
 12  order by c.name;

NAME    COUNT(J.ID)
------- -----------
categ 1           2
categ 2           0

SQL>

答案 2 :(得分:1)

您可以使用左连接(请参阅其他答案)或使用子查询来执行此操作:

SELECT
    c.Name
,   (SELECT COUNT(*) FROM jobs j WHERE j.category_id=c.id) AS Count
FROM job_category c