首页 > 解决方案 > 从具有相同 id 的一组值中选择最大值

问题描述

我有这两张表:

CREATE TABLE Category (

CategoryID int NOT NULL,
CategoryName varchar(255),

PRIMARY KEY (CategoryID)
);

CREATE TABLE Team (

CategoryID int NOT NULL,
TeamName varchar(255) NOT NULL,
Points int(255),

PRIMARY KEY (TeamName),
FOREIGN KEY (CategoryID) REFERENCES Category(CategoryID)
);

我想从每个类别中找到得分最高的球队。

到目前为止,我已经尝试过这些,我知道它们是错误的,但我处于死胡同。任何建议都会有所帮助。

SELECT category.categoryid, team.teamname, MAX(team.points)
FROM category, team
GROUP BY team.teamname
HAVING MAX(team.points);


select category.categoryid, team.teamname
from category
right join team on team.categoryid = category.categoryid
group by team.teamname
having max(team.points);


select team.categoryid, team.teamname
from team, team a
having max(team.points);


select category.categoryid, team.teamname, max(team.points), team.points
from team
inner join category on category.categoryid = team.categoryid
group by teamname
having (select distinct max(team.points) from team);


select category.categoryid, team.teamname, team.points
from team
inner join category on category.categoryid = team.categoryid;

标签: mysqlsqlmysql-workbench

解决方案


8.0 版支持dense_rank()

SELECT teamname
FROM (
    SELECT categoryid, teamname,
       dense_rank() over(partition by categoryid order by points desc) rnk
    FROM team
)t
WHERE rnk = 1
GROUP BY teamname
HAVING count(*) = (SELECT count(*) FROM Category);

推荐阅读