mysql - 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
解决方案
推荐阅读
- permissions - PDI - Microsoft Excel Writer - 权限被拒绝
- json - 在 JSON 编码中快速转义不需要的反斜杠字符
- java - Database Rider 中是否有任何方法可以减少 @DataSet 配置属性的重复?
- javascript - 无法在“FormData”上执行“附加”:参数 2 不是“Blob”类型
- android - 即使在同一设备上,通知操作按钮的 UI 也不一致
- python - 将numpy数组转换为结构化数组
- c# - c#中json文件的嵌套值的连接名称ex:`“obj_nested1_nested2”:“text”
- python - python中的多处理不会释放内存
- javascript - net::ERR_CONNECTION_REFUSED 与 redux 一起使用时
- javascript - 对数刻度偶尔会产生数百个刻度