Sql 如何数一对多

Sql 如何数一对多,sql,Sql,我有两个表,一个是Job Category,结构是|id | name,另一个是jobs,结构是|id | Job | u name | Job | u Category 如何计算每个类别中有多少份工作?你为什么需要加入?不是吗 select job_category, count(*) from jobs group by job_category 如果没有,请发布您自己的查询(以及一些可能有助于我们帮助您的示例数据) [阅读评论后编辑] 我的(过于)简化的“解决方案”似乎缺少一些细节。没错

我有两个表,一个是
Job Category
,结构是
|id | name
,另一个是
jobs
,结构是
|id | Job | u name | Job | u Category


如何计算每个类别中有多少份工作?

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

select job_category, count(*)
from jobs
group by job_category
如果没有,请发布您自己的查询(以及一些可能有助于我们帮助您的示例数据)

[阅读评论后编辑]

我的(过于)简化的“解决方案”似乎缺少一些细节。没错,它显示没有作业的类别,而OP要求这些类别也显示为“0”

带有适当计数函数的外部联接将修复该问题;这里有一个例子

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>

你为什么要加入?不是吗

select job_category, count(*)
from jobs
group by job_category
如果没有,请发布您自己的查询(以及一些可能有助于我们帮助您的示例数据)

[阅读评论后编辑]

我的(过于)简化的“解决方案”似乎缺少一些细节。没错,它显示没有作业的类别,而OP要求这些类别也显示为“0”

带有适当计数函数的外部联接将修复该问题;这里有一个例子

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>

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

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

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

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

显示您的工作以便我们为您指明正确的方向显示您的工作以便我们为您指明正确的方向这将排除没有作业的类别。当类别没有作业时,我希望返回0。可能吗?对,@juergen&Terchila Marian,我已经应用了你的建议并修改了我最初发布的邮件。这将排除没有作业的类别。如果类别没有作业,我想返回0。可能吗?对,@juergen&Terchila Marian,我已经应用了你的两个建议并修改了我最初发布的消息。