【发布时间】:2021-09-10 21:57:44
【问题描述】:
我有以下 2 个表:
表'船长'
| id | name |
|---|---|
| 1 | captain1 |
| 2 | captain2 |
| 3 | captain3 |
| 4 | captain4 |
| 5 | captain5 |
| 6 | captain6 |
| 7 | captain7 |
| 8 | captain8 |
| 9 | captain9 |
| 10 | captain10 |
表'远征'
| id | number | id_captain | id_navire | id_hero |
|---|---|---|---|---|
| 1 | 1 | 1 | 10 | 8 |
| 2 | 2 | 2 | 1 | 5 |
| 3 | 3 | 1 | 8 | 3 |
| 4 | 4 | 10 | 9 | 6 |
| 5 | 5 | 5 | 7 | 4 |
| 6 | 6 | 6 | 5 | 4 |
| 7 | 7 | 7 | 3 | 7 |
| 8 | 8 | 8 | 2 | 8 |
| 9 | 9 | 9 | 1 | 3 |
| 10 | 10 | 1 | 4 | 2 |
| 11 | 11 | 6 | 3 | 1 |
| 12 | 12 | 8 | 6 | 1 |
| 13 | 13 | 5 | 8 | 6 |
| 14 | 14 | 4 | 9 | 9 |
| 15 | 15 | 3 | 10 | 4 |
| 16 | 16 | 10 | 2 | 2 |
| 17 | 17 | 9 | 3 | 3 |
| 18 | 18 | 8 | 7 | 7 |
| 19 | 19 | 9 | 8 | 10 |
| 20 | 20 | 7 | 2 | 2 |
我有这个问题:
指导远征最多的船长 在 SQL 中对此进行了处理:
select id_captain, count(expedition.id) as expedition_count
from expedition
group by id_captain
having expedition_count = max(expedition_count);
但没有成功。我期待结果是这样的:
| name | expedition_count |
|---|---|
| captain1 | 3 |
| captain9 | 3 |
| captain8 | 3 |
【问题讨论】:
-
你使用的是什么 MySQL 版本?
-
这个:
having expedition_count = max(expedition_count)不能工作。在HAVING子句中,您一次查看一个聚合行。对于该行,有一个expedition_count,因此在该值 (max(expedition_count)) 上应用MAX并不能做太多事情。根据 DBMS,您将收到语法错误或max(expedition_count)仅解析为expedition_count。