【问题标题】:Select distinct by highest or lowest value按最高或最低值选择不同
【发布时间】:2016-05-02 00:42:56
【问题描述】:

我正在使用 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)。除了先创建临时表,先对结果排序,然后在临时表上执行选择之外,还有其他简单的方法吗?

【问题讨论】:

  • 你应该使用'min'和'group by'来代替distinct吗?

标签: php mysql distinct


【解决方案1】:

你可能对group by感兴趣:

SELECT name, min(result) as result
FROM results
WHERE event = 40
GROUP BY name

这将为您提供每位运动员的最佳成绩。

根据spencer 的建议,您还可以通过附加以下内容来订购列表:

ORDER BY min(result) ASC

【讨论】:

  • 我认为 OP 还想对结果进行“排名”,这表明 OP 想要将 ORDER BY min(result) ASC 添加到查询中。
  • @spencer7593,好收获!更新了答案。感谢您的提示。
  • 谢谢@AlexTartan
【解决方案2】:

问题在于ORDER BY 中使用的列未在DISTINCT 中指定。为此,您需要使用聚合函数进行排序,并使用GROUP BY 使DISTINCT 工作。

SELECT distinct name, event
FROM results
WHERE event = 40
GROUP BY name
ORDER by result DESC

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多