Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从一组具有相同id的值中选择“最大值”_Mysql_Sql_Mysql Workbench - Fatal编程技术网

Mysql 从一组具有相同id的值中选择“最大值”

Mysql 从一组具有相同id的值中选择“最大值”,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我有两张桌子: 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 (Ca

我有两张桌子:

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;
版本8.0支持密集排列

我想找到每个类别得分最多的球队

但是,如果在一个类别中有超过一个团队拥有相同的最大分数,那么所有团队都将被返回

如果在这种情况下只需要其中一个,则需要额外的排序,并且必须提供行的唯一性。例如,它可以是

将cte设置为SELECT*,按类别对分区进行排名。按团队的顺序。点数说明,团队。团队名称rnk 从类别 自然加入团队 挑选* 来自cte 其中rnk=1;
当然,您可以只选择所需的列,即选择CategoryName、TeamName。

按类别按分区排序按CTE中的点描述rnk排序,其中在外部查询中rnk=1。好吧,int50WOW@Akina你能花点时间解释一下这是怎么回事吗?我是SQL新手,我宁愿完全理解我在做什么,而不是复制粘贴it@RiggsFolly是的,我知道,对不起!在最后一组中有什么需要?dense_rank已经做了所有事情。@Akina-每个类别的大多数分数。每个类别的哪一行由rnk=1过滤?当一个团队的一个类别的排名为1,另一个类别的排名为2时,它不符合选择条件。因此,rnk=1,并且具有count。。OP需求:我想找到每个类别得分最多的团队。这不可能是在任何类别中得分最高的团队,很有可能没有这样的团队,因此是在至少一个类别中得分最高的团队。另外,阅读任务,因为我想找到每个类别得分最多的团队。
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);
WITH cte AS ( SELECT *, RANK() OVER (PARTITION BY CategoryID ORDER BY Team.Points DESC) rnk
              FROM Category 
              NATURAL JOIN Team )
SELECT *
FROM cte
WHERE rnk = 1