MySQL查询问题

时间:2015-05-17 08:40:08

标签: mysql

这是我的疑问:

  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,有医生,但没有没有。不知何故,我想要显示所有的部门和总数,这代表属于某个部门的医生。我怎么能这样做?

这是医生表:enter image description here 这是部门表enter image description here

3 个答案:

答案 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