使用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        |

View on DB Fiddle

请注意,可能存在联系,即不止一名学生具有相同的成绩并且 max_numbers。

| grade | max_numbers | studentname |
| ----- | ----------- | ----------- |
| A     | 10          | std1        |
| A     | 10          | std4        |
| B     | 8           | std2        |
| C     | 3           | std2        |

View on DB Fiddle