选择具有最高值的行,其中1列是唯一的

时间:2016-10-09 14:10:53

标签: php mysql

我有一个像这样的数据表

---------------------
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"将被添加

感谢任何帮助,谢谢

2 个答案:

答案 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