簡體   English   中英

SQL 名稱循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM