[英]SQL Loop Over Name
我有:
TABLE1
STUDENT CLASS SCORE
PAT A 14
PAT A 10
PAT B 13
PAT B 20
PAT C 11
MARK A 18
MARK A 13
MARK A 17
MARK A 10
DAVIS C 12
JER A 15
JER B 12
JER C 20
JER C 17
BARB C 14
BARB C 19
BARB C 11
TOM A 18
TOM A 12
TOM B 16
TOM B 12
並希望制作:
STUDENT CLASS AVERAGESCORE
PAT A 12
PAT B 16.5
PAT C 11
DAVIS A 14.5
DAVIS B NA
DAVIS C NA
MARK A NA
MARK B NA
MARK C 12
JER A 15
JER B 12
JER C 18.5
這是這樣做的:對於列表中的學生,計算 AVERAGE(SCORE) BY CLASS AND STUDENT
我嘗試這個沒有成功:
LIST1 = PAT, MARK, DAVIS, JER
select STUDENT, CLASS, AVG(SCORE) OVER(PARTITION BY STUDENT, CLASS) AS AVERAGE_SCORE
from TABLE1
where STUDENT in LIST1
select student, class, avg(score)
from table1
where student in ('PAT', 'DAVIS', 'MARK', 'JER')
group by student, class
嘗試以下操作,您首先需要一個包含所有 class / student 組合的列表,您可以對其進行外部連接然后聚合:
with c as (select distinct class from t),
s as (select Student from(values('PAT'),('MARK'),('DAVIS'),('JER'))s(Student)),
a as (select Student, Class from s cross join c)
select a.Student, a.Class, Avg(t.Score * 1.0) AverageScore
from a
left join t on t.class = a.class and t.Student = a.Student
group by a.Student, a.Class
order by a.Student, a.Class;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.