我不知道为什么在sql中用max avg选择记录时遇到了一个愚蠢的问题。
此查询生成有问题的表:
SELECT *
FROM (SELECT MATRDOC AS TEACHERID
FROM DOCENTE
WHERE MATRDOC NOT IN (SELECT MATRDOC
FROM CORSO
WHERE AREA <> 'BASI DI DATI')) DOC,
(SELECT C.CODCORSO AS COURSEID,
MATRDOC AS TEACHERID,
AVG(NUMSTUDENTI) AS GVA
FROM CORSO C, LEZIONE L
WHERE C.CODCORSO = L.CODCORSO
GROUP BY C.CODCORSO, MATRDOC) L
WHERE DOC.TEACHERID = L.TEACHERID;
使用此输出:
TEACHERID COURSEID GVA
S12346 C9 40.3333
S12346 C3 213
S12346 C11 88
S12348 C7 123
S12348 C5 79
S12348 C13 82.5
现在我想用max'gva'获取teacherid和courseid,所以我在查询的末尾添加了:
GROUP BY TEACHERID
HAVING MAX(GVA)
但它不起作用,我得到这些值:
TEACHERID COURSEID GVA
S12346 C9 40.3333
S12348 C7 123
2条答案
按热度按时间toiithl61#
如果我对你的问题理解正确,我想这应该行得通
yks3o0rb2#
学生的平均人数是“gva”,这似乎很奇怪,但还行。
在ansisql中,可以使用
fetch first
条款:并非所有数据库都支持
FETCH FIRST
. 常见的替代方案包括SELECT TOP
以及LIMIT
.编辑:
如果你想要每个老师的最大值,那么使用
ROW_NUMBER()
:这是所有ansi标准语法,包括正确使用
JOIN
.