我有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),它是所有平均值的最大平均值
我从这开始就遇到了语法错误!
SELECT COURSE_ID
FROM COURSES
HAVING MAX(SELECT AVG(GRADE)
FROM COURSES,
WHERE
COURSES.COURSE_ID=GRADES.COURSE_ID);
答案 0 :(得分:1)
(之前我确实误解了你的问题)
因此,您无法使用order by ... desc
,而不能使用with .. as...
我认为你正在做标准的sql,因为你没有提到使用过的sql server。 没有行限制等。
这不是一个很好的解决方案,但它只需要简单的语法using max() and group by
即可完成您的工作。
<强> http://sqlfiddle.com/#!2/5ccfc/1 强>
select
g.course_id, c.course
from (
select
course_id,
avg(grade) as average
from
grades
group by course_id
) g,
courses c
where
g.course_id = c.course_id
and g.average = (
select
max(g1.average)
from (
select
course_id,
avg(grade) as average
from
grades
group by course_id
) g1
)
;
结果
COURSE_ID COURSE
--------- ------
2 dstruct
<强> SQLFIDDLE 强> * http://sqlfiddle.com/#!2/5ccfc/1 *
答案 1 :(得分:1)
查询1 :
使用命名的子查询(如果有多个课程具有相同的最高平均成绩,那么这将返回所有这些课程):
WITH avg_grades AS (
SELECT course_id,
AVG( grade ) AS avg_grade
FROM grades
GROUP BY course_id
)
SELECT course_id
FROM avg_grades
WHERE avg_grade = ( SELECT MAX( avg_grade ) FROM avg_grades )
<强> Results 强>:
| COURSE_ID |
|-----------|
| 2 |
查询2 :
使用分析功能(如果有多个课程具有相同的最高平均成绩,那么这将仅返回其中一个 - 具有最大course_id
的那个):
SELECT MAX( course_id ) KEEP ( DENSE_RANK FIRST ORDER BY avg_grade DESC ) AS course_id
FROM ( SELECT course_id,
AVG( grade ) AS avg_grade
FROM grades
GROUP BY course_id )
<强> Results 强>:
| COURSE_ID |
|-----------|
| 2 |