查询子查询并具有计数(不同)条件

时间:2016-05-27 11:23:00

标签: mysql sql select

我正在尝试创建一个查询,列出在事件中排名前3位的每匹马的名称和身份2次或更多次。

这是我正在使用的两个表: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;

我显然做错了,因为当我运行此查询时,只有闪光灯出现,它应该是闪光灯和拳击手。

4 个答案:

答案 0 :(得分:1)

你的条件是计算一匹马完成的不同位置的数量,这是错误的,因为你肯定想要包括一匹先完成两次的马。此外,您错过了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;

答案 1 :(得分:1)

你错过了一群条件。

SELECT horse.horse_id, horse.name FROM horse
INNER JOIN 
(SELECT horse_id 
FROM entry 
WHERE place  in ('1', '2', '3')
group by horse_id
HAVING count(*) >1)
entry on horse.horse_id=entry.horse_id;

答案 2 :(得分:0)

你走了。

SELECT horse.horse_id, horse.name FROM horse
    INNER JOIN 
    (SELECT horse_id 
    FROM entry 
    WHERE place  in ('1', '2', '3')
    GROUP BY horse_id
    HAVING count(*) >1)
    entry on horse.horse_id=entry.horse_id;

答案 3 :(得分:0)

正如其他人指出你缺少GROUP BY子句,但我认为你可以避免使用子查询来简化查询: -

SELECT horse.horse_id, horse.name
FROM horse
INNER JOIN entry
ON horse.horse_id = entry.horse_id
WHERE entry.place IN ('1', '2', '3')
GROUP BY horse.horse_id
HAVING COUNT(*) > 1