SELECT doctor.name
, doctor.surname
, COUNT(checkup.doctor)
FROM doctor
, checkup
WHERE doctor.id = checkup.doctor
GROUP
BY doctor.name
ORDER
BY checkup.doctor
您希望根据聚合结果限制结果行。你会在晚上做的 HAVING 条款。 至于你的疑问:什么是 name ? 每个医生都有一个独特的名字?否则最好按id分组-只有这样,根据sql标准,此查询才有效。然后您使用的是我们在20世纪90年代停止使用的连接语法。请使用正确的ansi连接。 我更喜欢加入前聚合,但这只是个人喜好:
select d.name, d.surname, c.checkups
from doctor
join
(
select doctor as doctor_id, count(*) as checkups
from checkup
group by doctor
having count(*) > 10
) c on c.doctor_id = d.id
order by d.id;
你也可以用
select d.name, d.surname, count(*) as checkups
from doctor d
join checkup c on c.doctor = d.id
group by d.id
having count(*) > 10
order by d.id;
试试这个:你可以用 HAVING 子句以筛选出聚合结果并尝试避免过期的联接。 Surname 这并不意味着 GROUP BY 所以你用 MAX 从中选取 GROUP BY 或者保持原样:
SELECT doctor.name
, doctor.surname
, COUNT(checkup.doctor)
FROM doctor
INNER JOIN checkup ON doctor.id = checkup.doctor
GROUP BY doctor.name, doctor.surname
HAVING COUNT(checkup.doctor) > 10
SELECT doctor.name,doctor.surname,COUNT(checkup.doctor)
FROM doctor
INNER JOIN checkup doctor.id=checkup.doctor
GROUP BY doctor.name
Having COUNT(checkup.doctor) > 10
ORDER BY COUNT(checkup.doctor)
SELECT
doctor.name, doctor.surname, checkup_stat.checkup_count
FROM
(SELECT doctor, COUNT(1) AS checkup_count FROM checkup GROUP BY doctor ORDER BY doctor) AS checkup_stat
RIGHT JOIN
doctor
ON
doctor.id = checkup_stat.doctor
WHERE
checkup_stat.checkup_count > 10;
4条答案
按热度按时间flvlnr441#
您希望根据聚合结果限制结果行。你会在晚上做的
HAVING
条款。至于你的疑问:什么是
name
? 每个医生都有一个独特的名字?否则最好按id分组-只有这样,根据sql标准,此查询才有效。然后您使用的是我们在20世纪90年代停止使用的连接语法。请使用正确的ansi连接。我更喜欢加入前聚合,但这只是个人喜好:
你也可以用
2lpgd9682#
试试这个:你可以用
HAVING
子句以筛选出聚合结果并尝试避免过期的联接。Surname
这并不意味着GROUP BY
所以你用MAX
从中选取GROUP BY
或者保持原样:ej83mcc03#
如果只想得到计数超过10的结果(checkup.doctor),请确认使用聚合函数作为计数
您可以使用
where子句作用于选择行,因此不知道聚合结果的结果。。对于这个sql,使用having子句来过滤select的结果
eh57zj3b4#
我想这对你有用:
首先,使用子查询获取每个医生的检查计数。
其次,从checkup count>10的子查询结果中选择记录。
然后,把他们连在一起。