我正在使用MySQL / PHP5中的田径排名数据库,我正在努力找到以最高价值查询每位独特运动员的结果的最佳方式。
只是
SELECT distinct name, event
FROM results
示例数据库
name | event | result
--------------------------
athlete 1 | 40 | 7.43
athlete 2 | 40 | 7.66
athlete 1 | 40 | 7.33
athlete 1 | 60 | 9.99
athlete 2 | 60 | 10.55
所以,让我们说在这种情况下,我想通过我尝试过的最佳表现对运动员进行40米短跑比赛的排名
SELECT distinct name, event
FROM results
WHERE event = 40
ORDER by result DESC
但不同的只留下了运动员的第一次表现(7.43)并不是最好的(7.33)。除了首先创建临时表之外,还有一种简单的方法,首先排序结果,然后在临时表上执行选择吗?
答案 0 :(得分:4)
您可能对group by
感兴趣:
SELECT name, min(result) as result
FROM results
WHERE event = 40
GROUP BY name
这为每位运动员提供了最佳结果。
根据spencer的建议,您还可以通过添加以下内容来订购列表:
ORDER BY min(result) ASC
答案 1 :(得分:-1)
问题是ORDER BY
中未指定DISTINCT
中使用的列。为此,您需要使用聚合函数进行排序,并使用GROUP BY
使DISTINCT
正常工作。
SELECT distinct name, event
FROM results
WHERE event = 40
GROUP BY name
ORDER by result DESC