MySQL:查询“大于其中一个最大值”

文章访问量:

嵌套/连接查询“其中一个最大值”

任务描述

用嵌套查询这样的工程:供给该工程的零件P3的平均供应量,大于其中一种供给工程J1的零件的最大供应量

相关知识

供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:

,

现已构建SPJ表,结构信息如下:

,

开始你的任务吧,祝你成功!

嵌套查询

大于其中一个最大值

做头歌碰到的题…当时现场没写出来,反思,复盘。

平时太依赖别名了,导致写的SQL很乱,反思。

题目说的是”大于其中一个“,意思其实是大于最小的那个。最后是按MAX(QTY)去排序。(虽然我明明记得自己是这么写的,但就是哪不对…)。

先写内层SELECT也会更好理解。以后写嵌套还是先写内层吧。

USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT JNO
FROM SPJ
WHERE PNO="P3"
GROUP BY JNO
HAVING AVG(QTY)>(
    SELECT MAX(QTY) FROM SPJ 
    WHERE JNO="J1"
    GROUP BY PNO 
    ORDER BY MAX(QTY) ASC
    LIMIT 1
)

########## End ##########

链接查询

不一定得是JOIN

链接?连结?联结?连接?五花八门的词都有。不过微软官方文档用的是联接,SO….

我一直以为JOIN自己才是自联接,后面发现直接WHERE用两次也是自联接。而且GROUP BY的底层原理到底是什么…有点好奇了。

还是上面那个任务,但是改为联接查询。

USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT A.JNO
FROM SPJ AS A, SPJ AS B
WHERE A.PNO="P3" AND B.JNO="J1"
GROUP BY A.JNO,B.PNO
HAVING AVG(A.QTY)>MAX(B.QTY)

########## End ##########
Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
在此留下你的评论x