首页 > 解决方案 > MySQL:显示十个名字和比赛的数量,按字母分组

问题描述

我有一个事件结果数据库。有一个叫做 的表races和一个叫做 的表entrants

我想显示每个参赛者的姓氏字母表的前十名参赛者(注意下面的示例被截断,不会达到 10),按每个参赛者参加的比赛次数排序。

进入者表结构如下:

Name                 ¦ Surname    ¦ Letter ¦ ID ¦ Nationality
John ARBOR           ¦ ARBOR      ¦ A      ¦ 1  ¦ gb
István NAGY          ¦ NAGY       ¦ N      ¦ 2  ¦ hu
Günter HOLZMANN      ¦ HOLZMANN   ¦ H      ¦ 3  ¦ at
Bernard NEWMAN       ¦ NEWMAN     ¦ N      ¦ 4  ¦ gb
Feliciano DE ALMEIDA ¦ DE ALMEIDA ¦ D      ¦ 5  ¦ it
Joe BIDEN            ¦ BIDEN      ¦ B      ¦ 6  ¦ us
Nina ASIM            ¦ ASIM       ¦ A      ¦ 7  ¦ fr
Zac NECCHI           ¦ NECCHI     ¦ N      ¦ 8  ¦ au

比赛表结构示例如下:

race_id ¦ Pos ¦ Name                 ¦ Time
0001    ¦ 1   ¦ Bernard NEWMAN       ¦ 4:56:34.386
0001    ¦ 2   ¦ Günter HOLZMANN      ¦ 4:59:59:001
0001    ¦ 3   ¦ Nina ASIM            ¦ 5:02:14.443
0001    ¦ 4   ¦ Zac NECCHI           ¦ 5:05:10.101
0002    ¦ 1   ¦ István NAGY          ¦ 0:34:05.714
0002    ¦ 2   ¦ Joe BIDEN            ¦ 0:35:00:559
0002    ¦ 3   ¦ Bernard NEWMAN       ¦ 0:35:10.050
0002    ¦ 4   ¦ Günter HOLZMANN      ¦ 0:36:09.572
0003    ¦ 1   ¦ Feliciano DE ALMEIDA ¦ 1:07:44.678
0003    ¦ 2   ¦ John ARBOR           ¦ 1:10:13.873
0003    ¦ 3   ¦ Bernard NEWMAN       ¦ 1:11:44.665
0003    ¦ 4   ¦ Nina ASIM            ¦ 1:11:44.788
0003    ¦ 5   ¦ István NAGY          ¦ 2:12:12.650

字母“A”的预期 SQL 结果(显然,实际数据集将限制为 10 而不是 2):

Letter ¦ Name             ¦ Entries
A      ¦ Nina ASIM        ¦ 2
A      ¦ John ARBOR       ¦ 1

字母“N”的预期 SQL 结果(显然,真实数据集将限制为 10 而不是 3):

Letter ¦ Name             ¦ Entries
N      ¦ Bernard NEWMAN   ¦ 3
N      ¦ István NAGY      ¦ 2
N      ¦ Zac NECCHI       ¦ 1

... 等等...

我正在建立一个索引页面,并打算为字母表中的每个字母显示十个名字,显示每个字母的十个最多产的名字,按参赛人数排序。

从基础开始:

SELECT e.name from entrants e WHERE e.letter = "A" LIMIT 10

我需要子查询吗?

此查询产生的结果没有每个字母十个的限制:

SELECT r.entrant, r.entrant_id, e.letter, COUNT(*) AS num_races
FROM races r
LEFT JOIN entrant e ON r.entrant_id = e.id
GROUP BY 1
ORDER BY e.letter ASC, num_races DESC

标签: mysql

解决方案


推荐阅读