SQL:在显示其他列条目时按列分组

时间:2016-09-26 20:47:46

标签: mysql group-by aggregate-functions

所以,让我们说我有两张桌子:

name_tbl

| INIT | NAME    | 
| JA   | Jack    | 
| JO   | John    | 
| MI   | Michael | 
| GE   | George  | 
| WI   | William | 
| BL   | Blake   | 
| PE   | Peter   |

ranking_tbl

| YEAR | INIT | RANKING
| 1990 | JA   | 5
| 1990 | JO   | 22
| 1990 | PE   | 54
| 1992 | MI   | 2
| 1992 | JA   | 14
| 1993 | GE   | 1
| 1994 | JO   | 8

我希望按年分组,并显示当年的最高排名,以及当年排名最高的人的姓名。

我能够通过使用排名上的聚合函数和按年份分组来轻松显示年份和排名。但是,我在确定如何显示最高级别的名称时遇到了问题。

到目前为止,我编写了以下SQL:

SELECT r.year, min(r.ranking)
FROM RANKING_TBL r
GROUP BY r.year

我尝试将Inner连接到另一个表并选择名称,但它返回一个错误,说我必须在聚合函数或GROUP BY子句中包含它...

SELECT r.year, min(r.ranking), n.name
FROM ranking_tbl r
INNER JOIN name_tbl n
ON r.init = n.init
GROUP BY r.year

1 个答案:

答案 0 :(得分:0)

您可以在年份和最大(排名)上使用带有in子句的子查询

 select a.year, a.ranking, b.name
 from ranking_tbl as a 
 inner join name_tbl as b  on a.init = b.init
 where (a.year, a.ranking)  in (
       select year, max(ranking)
       from ranking_tbl
       group by year )
相关问题