参考链接:

sql 怎么取count(*)中的最大值_FlashCanSavetheWorld的博客-CSDN博客

起初并没有看懂这个链接的意思,在同事的帮助下得到了实现。

过程是这样的:

(不想看过程可直接跳到最后看结果)

我有两个表,一个是飞机故障的信息,一个是故障的信息

faultinfo表

 planeinfo表

 

然后我现在想得到飞机在哪一年发生故障的次数最多。

首先我用左连接的方法得到了飞机每年发生的所有故障次数。

SELECT
YEAR (P.failureTime) year1,COUNT(F.failureExp) myCount
from planeinfo P LEFT JOIN faultinfo F ON P.failureNumber = F.failureNumber 
GROUP BY YEAR(P.failureTime)

然后我希望可以从这个基础上,得到myCount的最大值

于是

我用 了MAX(COUNT(F.failureExp))直接套用的法子

显然这个是不行的。

后来得到了一个链接的启发

我添加了一个条件语句 HAVING COUNT(F.failureExp) = MAX(myCount)

形成了

然而查询为空?

百思不得其解,百度无果寻找同事帮助得到了

SELECT
	xxx.year1,
	MAX(xxx.myCount)
FROM
	(
		SELECT
			YEAR (P.failureTime) year1,
			COUNT(F.failureExp) myCount
from planeinfo P LEFT JOIN faultinfo F ON P.failureNumber = F.failureNumber 
GROUP BY YEAR(P.failureTime) )xxx;

由上方查询结果可知,这个语句得到的结果是正确的。

这段语句的意思是

#查询一个叫xxx表中的year1字段和xxx表中myCount字段的最大值
SELECT
	xxx.year1,
	MAX(xxx.myCount)

#xxx来自于下面的select
FROM
	(
        #查找我本来的表planeinfo ,faultinfo中的数据
        #获取表中的年份和每年的故障总数 
        #并将查询的年份设置别名year1, 查询的总故障数设置别名myCount
		SELECT
			YEAR (P.failureTime) year1,
			COUNT(F.failureExp) myCount

#用到了左连接查询得到结果
from planeinfo P LEFT JOIN faultinfo F ON P.failureNumber = F.failureNumber 

#将结果按年份进行分组
GROUP BY YEAR(P.failureTime) )xxx;//xxx是开头的xxx

#这里用到了一个方法将第二个select查询的结果作为一个独立的表
#这个表被我们自定义名为xxx
#xxx的字段year1和myCount也是我们自定义的别名

#然后就顺理成章的就这样成功啦
#撒花

主要意思就是将开始的查询结果自定义成一个表,

然后根据自定义的字段别名和字段表别名进行查询寻找最大值

所以模板大概就是

SELECT
	自定义表名.字段别名
FROM
	(
		SELECT
			字段名 别名
from 表名
GROUP BY 字段名 )自定义表名;



#表的范围就是()中的范围

可能这就是所谓的inner query叭?

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐