【问题标题】:Using WHERE, GROUP BY and ORDER BY使用 WHERE、GROUP BY 和 ORDER BY
【发布时间】:2013-05-24 15:26:08
【问题描述】:

我有一个表RacesTimes,其中包含RaceIDTotalTime 列,如何检索每个RaceID 的最低TotalTime

我试过了(也很少有其他变化,但没有结果)

SELECT * 
FROM `RacesTimes` 
GROUP BY `RaceID` 
ORDER BY `TotalTime` ASC  

但它给了我从 RaceID 插入的第一行,而不是从 RaceID 插入的最低行 TotalTime

【问题讨论】:

    标签: mysql group-by where


    【解决方案1】:
    SELECT MIN(TotalTime), RaceID
    FROM RacesTimes
    GROUP BY RaceID
    ORDER BY MIN(TotalTime) ASC
    

    请注意,MySQL 允许您使用的语法:其他 RDBMS 不允许。

    这表示“给我每个 RacedID 的最短 TotalTime”

    【讨论】:

    • 谢谢!但我还需要其他东西:我想从该最小行中选择所有内容,您可以修改该查询吗?我试过了,但它是从插入的第一行中选择的。
    • 看这个:stackoverflow.com/questions/16733284/… 这是 HSQL 但同样的想法也适用(我最后一次查询)
    • 我按照你所说的做了:SELECT ANY(RaceID), MIN(TotalTime), RaceID FROM RacesTimes GROUP BY RaceID 但它给了我“#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以便在第 1 行的 '( RaceID ), MIN( TotalTime ), RaceID FROM RacesTimes GROUP BY RaceID ' 附近使用正确的语法”,可能它无法识别任何函数。
    • @NistorConstantin:MySQL 没有任何功能。我的意思是我的第三个查询对不起。 ANY 在编辑中添加。哎呀
    【解决方案2】:

    你需要一个aggregate function,特别是MIN

    SELECT RaceID, MIN(TotalTime)
    FROM RaceTimes
    GROUP BY RaceID
    

    【讨论】:

      【解决方案3】:

      表中的其他列也很少,如何将它们全部提取(使用分组的 MIN 列)?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 2022-01-16
        相关资源
        最近更新 更多