我有一个像这样的数据表
---------------------
Name | Image | Points
---------------------
Bob | a.jpg | 100
Bob | b.jpg | 56
Sal | c.jpg | 87
Jim | d.jpg | 34
Bet | e.jpg | 23
Bren | f.jpg | 5
Bren | g.jpg | 15
Test | h.jpg | 10
我想要做的是选择5行,其中包含最高的"积分"但不要重复"姓名"考虑到了。
只选择最高的5将返回
Name | Image | Points
---------------------
Bob | a.jpg | 100
Sal | c.jpg | 87
Bob | b.jpg | 56
Jim | d.jpg | 34
Bet | e.jpg | 23
但我不想包含重复的行,因此上面的第二个Bob将被删除并且" Bren | g.jpg | 15"将被添加
感谢任何帮助,谢谢
答案 0 :(得分:0)
您可以使用NOT EXISTS()
:
SELECT * FROM YourTable t
WHERE NOT EXISTS(SELECT 1 FROM YourTable s
WHERE t.name = s.name AND s.points > t.points)
ORDER BY t.points DESC
LIMIT 5
答案 1 :(得分:0)
或者我认为更简单/更整洁且不需要子查询就是使用group by
来避免重复
SELECT * FROM YourTable t
GROUP BY Name
ORDER BY t.points DESC
LIMIT 5