mysql - 使用子查询并具有 count(distinct) 条件的查询

标签 mysql sql select

我正在尝试创建一个查询,列出在某个赛事中两次或多次进入前 3 名的每匹马的名称和 ID。

这是我正在使用的两个表:enter image description here

enter image description here

这是我提出的查询:

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/

相关文章:

sql - 根据日期计算某行最大值与其他行的差值

php - 如何填充 zend 表单选择元素?

C++ IO/多路复用 TCP 服务器和 POSIX 线程

mysql - 选择在过去 'x' 天内从类别 'y' 购买商品 'z' 次的所有客户

python - 在通过 DataNitro 将行传递到 Excel 之前,使用 fetchall() 过滤 mySQL 数据

java - 部署我的应用程序后无法连接到 MySQL

mysql - 为什么 SQL 查询 SELECT 不返回 IS NULL 结果

mysql - 我怎样才能使查询更快

mysql - 使用 GROUP BY 时计算空值

sql - Windows SQL 数据库行顺序?