SQL如何先order再group?

数据表比如:

namescoretime
Jame102021
Kim202022
Jame502020
Tom302019
Kim142023

取出每个人的最高成绩,

select name, score from (select name, score from table order by score desc) as t group by name

以上没用,网上找了半天居然没有找到一个可靠简单的方法,这个需求很特殊吗?
各位帮忙提供下写法,有劳

select name,max(score) from table group by name

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    可以使用MySQL语句来解决该问题。具体步骤如下:

    Step 1: 连接到数据库:

    mysql -u username -p password -h localhost database_name
    

    Step 2: 创建临时表,对原数据表进行排序:

    CREATE TEMPORARY TABLE temp_table 
    (SELECT name, MAX(score) AS highest_score 
    FROM original_table 
    GROUP BY name 
    ORDER BY highest_score DESC);
    

    Step 3: 按人名分组、取最高成绩:

    SELECT t1.name, t1.highest_score 
    FROM temp_table t1 
    INNER JOIN original_table t2 
    ON t1.name = t2.name AND t1.highest_score = t2.score 
    GROUP BY t1.name 
    ORDER BY t1.highest_score DESC;
    

    这个SQL语句首先创建一个临时表格(temporary table)来存储每个人最高分数,根据分数从高到低排序。然后,通过INNER JOIN操作将原始表格(original table)与临时表格连接起来,只选择每个人最高分数对应的行,最后根据分数从高到低排序并分组,输出每个人的最高分数。

    如果在执行任何SQL语句之前需要查看当前使用的数据库,可以使用以下命令:

    SHOW DATABASES;
    

    如果没有找到预期的数据库名,则可以使用以下命令创建一个新的数据库:

    CREATE DATABASE database_name;
    

    需要注意的是,在实际操作中,需要将username和password替换为自己数据库的用户名和密码。如果没有设置密码,则可以省略-p参数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^