在另一个方法中编写SQL查询[SQL PLUS]

时间:2014-01-11 16:44:47

标签: sql oracle

我有2个表(等级,课程),我需要找到COURSE_ID,其中所有课程等级的最高平均成绩

示例:

DBASE COURSE GRADES : 90,60,90,100 (AVGERAGE=85)
DSTRUCT COURSE GRADES : 100,100,100,100 (AVERAGE=100)
C# COURSE GRADES : 50,50,60,60 (AVERAGE = 55)

所以我应该得到课程的COURSE_ID(DSTRUCT),它是所有平均值的最大平均值

所以我有这个代码(我没有写它),我需要写它而不指定“c”和“g”和“g1”

SELECT g.course_id
  FROM (SELECT  course_id, avg(grade) AS average FROM grades GROUP BY course_id) g
 WHERE g.average = (
      SELECT max(g1.average)
        FROM (SELECT course_id, avg(grade) AS average FROM grades GROUP BY course_id) g1
);

3 个答案:

答案 0 :(得分:2)

我不建议这样做,但这是我能想到的唯一方式,符合你所规定的极端标准。对于将来需要这个的人,请查看我的其他答案,而不是这个答案。

SELECT course_id, AVG(grade) 
FROM   grades
GROUP BY course_id 
HAVING AVG(grade) >= ALL (
    SELECT AVG(grade) 
    FROM   grades
    GROUP BY course_id )

答案 1 :(得分:1)

SELECT course_id, AVG(grade) 
FROM   grades
GROUP BY course_id
ORDER BY AVG(grade) DESC
LIMIT 1

答案 2 :(得分:0)

这可以是你的答案

SELECT course_id
  FROM (SELECT course_id, AVG(grade)
          FROM grades
         GROUP BY course
         ORDER BY AVG(grade) DESC)
 WHERE rownum = 1;