SQL查询显示单个成绩,然后是具有平均字幕的行

时间:2014-07-11 17:25:17

标签: sql oracle

我有以下问题。创建一个查询,显示第95节中学生127的所有单个成绩以及这些成绩的平均值。个别成绩应首先以平均值为底。列出成绩类型代码和数字成绩。平均行的标题应为“学生平均值127”。

我能够获得学生的成绩类型和成绩但是在理解如何制作标题方面存在问题。这是我现在的一些代码,我知道它不正确但我会在这里发布,这样你就可以看到我拥有的代码。

SELECT Grade_Type_Code, CAST(Numeric_Grade as DECIMAL(10,2)) AS Grade
FROM Grade
WHERE Student_Id = 127
  AND Section_Id = 95
UNION
SELECT Grade_Type_Code, AVG(Numeric_Grade)
FROM Grade
WHERE Student_Id = 127
  AND Section_Id = 95
GROUP BY Numeric_Grade, Grade_Type_Code;

我假设我可能不得不在那里扔COUNT(*)来获得平均值?但是,即使这是实现它的方式,我将如何添加标题?

任何帮助都会很棒,here is the Schema

DBMS:我正在使用Oracle SQL Developer

这是预期结果

GRADE_TYPE_CODE         GRADE
----------------------- ------
QZ                      92.00
QZ                      91.00
PA                      91.00
MT                      88.00
HM                      74.00
HM                      84.00
HM                      84.00
HM                      74.00
FI                      85.00
Average for student 127 84.78

注意:这个问题的基础是由

组成
UNION
UNION ALL
INTERSECT
MINUS

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

-- vvv Setting up test data vvv --
create table #temp (thing varchar(50), grade decimal(4,2))

insert into #temp (thing, grade)
select 'test', 90
union all select 'test2', 95.5
union all select 'test3', 60
union all select 'test4', 80
-- ^^^ Setting up test data ^^^ --

select  thing, grade
from    #temp
union all
select  'Student average', avg(grade)
from    #temp

drop table #temp

请注意,在此示例中,我创建了自己的测试数据,您可以为您的真实对象切换我的临时对象 - 特别是因为听起来这是学校的工作并不想给你完整的回答:P