Mysql 具有子查询和计数(不同)条件的查询
我试图创建一个查询,列出在一个事件中2次或更多次进入前3名的每匹马的名字和id 这是我正在使用的两个表: 这就是我提出的问题:Mysql 具有子查询和计数(不同)条件的查询,mysql,sql,select,Mysql,Sql,Select,我试图创建一个查询,列出在一个事件中2次或更多次进入前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.
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;
我显然做错了什么,因为当我运行这个查询时,只有flash出现,而它应该是flash和boxer 您的条件计算了一匹马完成的不同位置的数量,这是错误的,因为您肯定希望包括一匹先完成两次的马。此外,您缺少一个
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;
给你
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;
你错过了分组比赛
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;
正如其他人指出的,您缺少GROUPBY子句,但我认为您可以避免使用子查询来简化查询:-
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
你能公布结果吗?为什么在Having子句中使用distinct count?我希望能得到每匹马的名字和马匹id,这匹马排在前3名(即第一、第二或第三名)2次或2次以上。我认为应该是flash(101)和boxer(201),因为flash得到了1和1,而boxer得到了3、2和3。