使用Mysql来统计等级数
Using Mysql to count the number of grade
我有一个 table,如下所示。我正在努力获得成绩、该成绩的最高分以及获得该高分的学生。
name first_term_grade number
std1 A 10
std2 B 8
std3 A 6
std1 B 1
std2 C 3
std3 B 2
std1 C 0
std2 A 1
std3 C 2
目标结果如下图
grade max_numbers studentname
A 10 std1
B 8 std2
C 3 std2
I am using MySQL but can't find a way around this. Can someone please put me through.
在 MySQL 8+ 中,ROW_NUMBER()
使这变得简单:
SELECT first_term_grade AS grade, number AS max_numbers, name AS studentname
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY first_term_grade ORDER BY number DESC) rn
FROM yourTable
) t
WHERE rn = 1
ORDER BY grade;
上面的查询表示为每个具有最高数值的字母等级保留一行。
如果你是 运行 版本小于 SQL 8,那么:
select sq.*, the_table.name as studentname from (
select first_term_grade as grade, max(number) as max_numbers
from the_table
group by first_term_grade
) sq
join the_table on sq.grade = the_table.first_term_grade and sq.max_numbers = the_table.number
order by sq.grade
;
| grade | max_numbers | studentname |
| ----- | ----------- | ----------- |
| A | 10 | std1 |
| B | 8 | std2 |
| C | 3 | std2 |
请注意,可能存在联系,即不止一名学生具有相同的成绩并且 max_numbers。
| grade | max_numbers | studentname |
| ----- | ----------- | ----------- |
| A | 10 | std1 |
| A | 10 | std4 |
| B | 8 | std2 |
| C | 3 | std2 |
我有一个 table,如下所示。我正在努力获得成绩、该成绩的最高分以及获得该高分的学生。
name first_term_grade number
std1 A 10
std2 B 8
std3 A 6
std1 B 1
std2 C 3
std3 B 2
std1 C 0
std2 A 1
std3 C 2
目标结果如下图
grade max_numbers studentname
A 10 std1
B 8 std2
C 3 std2
I am using MySQL but can't find a way around this. Can someone please put me through.
在 MySQL 8+ 中,ROW_NUMBER()
使这变得简单:
SELECT first_term_grade AS grade, number AS max_numbers, name AS studentname
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY first_term_grade ORDER BY number DESC) rn
FROM yourTable
) t
WHERE rn = 1
ORDER BY grade;
上面的查询表示为每个具有最高数值的字母等级保留一行。
如果你是 运行 版本小于 SQL 8,那么:
select sq.*, the_table.name as studentname from (
select first_term_grade as grade, max(number) as max_numbers
from the_table
group by first_term_grade
) sq
join the_table on sq.grade = the_table.first_term_grade and sq.max_numbers = the_table.number
order by sq.grade
;
| grade | max_numbers | studentname |
| ----- | ----------- | ----------- |
| A | 10 | std1 |
| B | 8 | std2 |
| C | 3 | std2 |
请注意,可能存在联系,即不止一名学生具有相同的成绩并且 max_numbers。
| grade | max_numbers | studentname |
| ----- | ----------- | ----------- |
| A | 10 | std1 |
| A | 10 | std4 |
| B | 8 | std2 |
| C | 3 | std2 |