【问题标题】:MySQL subquery with two tables count and group by具有两个表计数和分组依据的 MySQL 子查询
【发布时间】:2018-02-22 12:29:32
【问题描述】:

我有由医院医生表加入的医生和医院数据库。

我必须列出城镇,每个城镇的医院数量,但仅限于拥有超过 5 名医生的医院。

SELECT hospital.town, count(town)
FROM hospital 
WHERE hospital.id = (
    SELECT count(hospital_id)
    FROM hospital_doctor GROUP BY hospital_id
    HAVING count(hospital_id)>5 )
GROUP BY town 

这是我的查询,但 MySQL 返回我的子查询返回超过 1 行。

医院

医院医生

我应该如何编写这个查询?

【问题讨论】:

  • 我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。

标签: mysql sql


【解决方案1】:

你可以用基本相同的结构做你想做的事:

Select h.town, count(*)
from hospital h
where h.id in (select hd.hospital_id
               from hospital_doctor hd
               group by hd.hospital_id
               having count(*) > 5
              )
group by h.town ;

注意以下几点:

  • 您想使用in 而不是=,因为子查询可能返回不止一行。
  • 子查询应该返回医院 ID 而不是计数。
  • 只要一个表引用多个表,就使用表别名和限定列名。

【讨论】:

  • 感谢您解决我的问题并提出建议。问候:)
【解决方案2】:
SELECT h.town,  count(h.town)
FROM 
(
    SELECT hospital_id
    FROM hospital_doctor GROUP BY hospital_id
    HAVING count(doctor_id)>5 
) s1 
left outer join hospital h on (s1.hospital_id=h.id)  
GROUP BY h.town 

【讨论】:

    【解决方案3】:
    Select hospital.town, count(town) 
    from hospital 
    where 
        hospital.id in ( 
            select hospital_id 
            from hospital_doctor 
            group by hospital_id 
            having count(hospital_id)>5 
        ) 
    group by town
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多