MySQL GROUP BY与AS使用问题:如何查询使用次数最多的机型
解决查询使用次数最多飞机机型的问题
嘿,我来帮你搞定这个问题~首先得说清楚你为啥会报错:你用GROUP BY Number DESC是不对的,GROUP BY的作用是指定分组的字段,而不是用来排序结果的,排序得用ORDER BY哦!
下面给你两种可行的解决方案,你可以根据自己的需求选择:
方法1:只返回单个最高次数的机型(适合无并列的情况)
在你原来的查询语句基础上,加上ORDER BY Number DESC来按次数降序排列,再用LIMIT 1取第一条结果就行:
SELECT Planes.type, COUNT(Planes.type) AS Number FROM Flights JOIN Planes ON Flights.idPlane = Planes.idPlanes GROUP BY Planes.Type ORDER BY Number DESC LIMIT 1;
这个方法简单直接,但要注意:如果有多个机型的使用次数都是最高的(比如假设777和787的次数都是4),它只会返回其中一个。
方法2:返回所有并列最高次数的机型
如果需要把所有次数并列第一的机型都查出来,可以用窗口函数RANK()来实现:
WITH RankedPlanes AS ( SELECT Planes.type, COUNT(Planes.type) AS Number, -- 按次数降序排名,并列的会得到相同排名 RANK() OVER (ORDER BY COUNT(Planes.type) DESC) AS rnk FROM Flights JOIN Planes ON Flights.idPlane = Planes.idPlanes GROUP BY Planes.Type ) SELECT type, Number FROM RankedPlanes WHERE rnk = 1;
这里用CTE(公共表表达式)先给每个机型的次数排名,然后筛选出排名为1的记录,这样所有并列第一的机型都会被返回。
内容的提问来源于stack exchange,提问作者Brayn
相关产品推荐
相关产品推荐

