SELECT america,
america_un,
game,
genre,
id,
platform,
url
FROM `main-games`
ORDER BY tally_rank
LIMIT 3
基本上我的问题是我有时会有两个游戏(不同的数据,只是同一个名字),这些游戏的tally_rank-s彼此相互关联,给我一些重复。基本上我想要做的是让游戏专栏与众不同,所以除了我遇到的第一个游戏外,它忽略了任何其他同名游戏。
所以如果我有“game1,game2,game2,game3”,我会想要第一个游戏2并且会忽略第二个游戏。
不知道如何做到这一点,因为从我记忆中来看,DISTINCT在MySQL中是全有或全无。
编辑:我应该注意到我已经使用了GROUP BY游戏,但由于某种原因,它会跳过其他所有记录(2,4等)。
编辑2:以下是数据库中tally_rank的正确顺序:
Knight's Contract
Fight Night Champion
The Legend of Heroes: Trails in the Sky
PopCap Hits!
Killzone 3
将会发生的情况是查询将获得1/3/5,如果我删除“GROUP BY游戏”,它将获得1/2/3。不太确定为什么“GROUP BY游戏”正在跳过记录。
答案 0 :(得分:0)
没有DISTINCT:
SELECT field1,field2,field3,game FROM `main-games` GROUP BY game LIMIT 3;
WITH DISTINCT:
SELECT DISTINCT(game),field1,field2 FROM `main-games` ORDER BY tally_rank LIMIT 3;
答案 1 :(得分:0)
尝试GROUP BY
一个字段时,但在“分组之前”应用一些排序(意思是 - 按游戏分组,但从每组相同的游戏中获取第一个游戏) ,我认为你可以使用内部选择:
SELECT m.america,
m.america_un,
m.game,
m.genre,
m.id,
m.platform,
m.url
FROM `main-games` m
JOIN (SELECT game,
min(id) AS id
FROM `main-games`
ORDER BY tally_rank
GROUP BY game) as t
ON m.game = t.game AND m.id = t.id
ORDER BY m.tally_rank
LIMIT 3
内表有每个游戏的游戏名称和最小ID - 它告诉哪一个是每个组中的第一个游戏。外部选择使用此ID来查找此特定游戏记录并为其获取其余数据。
答案 2 :(得分:0)
如果你不能使用Distinct或Group BY,可以试试这个:
SELECT america,
america_un,
game,
genre,
id,
platform,
url
FROM `main-games` M1 LEFT JOIN `main-games` M2
ON (M1.game = M2.game AND M1.id > M2.id)
WHERE M2.id IS NULL
ORDER BY tally_rank LIMIT 3