任务描述
用嵌套查询这样的工程:供给该工程的零件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 ##########