数据表比如:
name | score | time |
---|---|---|
Jame | 10 | 2021 |
Kim | 20 | 2022 |
Jame | 50 | 2020 |
Tom | 30 | 2019 |
Kim | 14 | 2023 |
取出每个人的最高成绩,
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
不知道你这个问题是否已经解决, 如果还没有解决的话:可以使用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参数。