我正在尝试创建一个查询,列出在某个赛事中两次或多次进入前 3 名的每匹马的名称和 ID。
这是我提出的查询:
SELECT horse.horse_id, horse.name FROM horse
INNER JOIN
(SELECT horse_id
FROM entry
WHERE place in ('1', '2', '3')
HAVING count(distinct place) >1)
entry on horse.horse_id=entry.horse_id;
我显然做错了什么,因为当我运行这个查询时,只出现闪存,而它应该是闪存和拳击手。
最佳答案
您的条件计算一匹马完成的不同位置的数量,这是错误的,因为您肯定希望包括一匹两次获得第一名的马。此外,您缺少 group by
子句:
SELECT horse.horse_id, horse.name
FROM horse
INNER JOIN (SELECT horse_id
FROM entry
WHERE place IN (1, 2, 3) -- should probably be numbers, BTW
GROUP BY horse_id
HAVING COUNT(*) > 1) entry ON horse.horse_id = entry.horse_id;
关于mysql - 使用子查询并具有 count(distinct) 条件的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482216/