問題描述:
表信息為:
create table SC(SID tinyint,CID tinyint,score tinyint)charset utf8;
set names gbk;
insert into SC
values(01,01,80),(01,02,90),(01,03,99),(02,01,70),(02,02,60),
(02,03,80),(03,03,80),(04,01,50),(04,02,30),(04,03,20),
(05,01,76),(05,02,87),(06,03,34),(07,02,89),(07,03,98),
(03,01,80),(03,02,80),(06,01,31);
需要查找:按平均成績從高到低顯示所有學(xué)生的所有課程的成績以及平均成績
sql語句
select Sid,max(case Cid when '1' thenscore else 0 end)'01',??
max(case Cid when '2' then score else 0end)'02',??
max(case Cid when '3' then score else 0end)'03',AVG(score)平均分 from SC??
groupby Sid order by平均分desc??;
不加max()函數(shù)的sql語句:
select Sid,(case Cid when '1' then scoreelse 0 end)'01',??
(case Cid when '2' then score else 0end)'02',??
(case Cid when '3' then score else 0end)'03',AVG(score)平均分 from SC??
group by Sid order by 平均分 desc??;
以上兩個SQL語句有什么區(qū)別嗎?
解決方法:
max()函數(shù)檢索的是每個學(xué)生每個科目的分?jǐn)?shù),不加max()函數(shù)檢索的是每個學(xué)生按原數(shù)據(jù)表中的順序的第一個科目的分?jǐn)?shù)
case when實現(xiàn)行列轉(zhuǎn)換時會出現(xiàn)多條記錄,如果不用聚合函數(shù)直接進(jìn)行g(shù)roup by分組,那么檢索的是基表里分組字段的第一條記錄,
如果使用max()函數(shù)之后再進(jìn)行g(shù)roup by分組,那么就會檢索每個字段的最大值然后再分組








暫無數(shù)據(jù)