这是我的疑问:
SELECT count(*) as total, dp.name,dp.id,dp.description, dp.avatar
FROM `doctors` d
right join departments dp on d.department_id = dp.id
group by d.department_id
我有桌子:医生和部门。我想提取每个部门的医生总数。这个查询工作正常,它返回给我所有的deparments,有医生,但没有没有。不知何故,我想要显示所有的部门和总数,这代表属于某个部门的医生。我怎么能这样做?
这是医生表: 这是部门表
答案 0 :(得分:0)
SELECT (SELECT count(*) FROM doctors AS d WHERE d.id = dp.id) as total, dp.name,dp.id,dp.description, dp.avatar
FROM departments dp
有多种方法可以做到这一点,我会这样做
我认为你不需要加入你只是需要所有医生的数量,而你没有对其他信息做任何事情
答案 1 :(得分:0)
在我使用SQL的几十年里,我从未使用过正确的连接。我总是发现LEFT连接更容易阅读。我也尝试按照从最高到最低的细节级别返回列,并以sum和count结束。它看起来好多了。
试试这个:
SELECT dp.id,dp.name,dp.description, dp.avatar,count(*) as total
FROM departments dp
LEFT JOIN doctors d
on d.department_id = dp.id
GROUP BY dp.id,dp.name,dp.description, dp.avatar
您必须始终按照select子句中的每一列进行分组,除了那些是聚合(例如sum,count)或常量。
答案 2 :(得分:0)
你可以尝试一下:
SELECT
(SELECT count(*) FROM doctors d WHERE d.department_id = dp.id) AS total,
dp.*
FROM departments AS dp
如果您想使用JOIN
,请尝试以下操作:
SELECT
COUNT(d.department_id) AS total,
dp.*
FROM departments AS dp
LEFT JOIN doctors AS d ON dp.id = d.department_id
GROUP BY dp.id