測試表:
sql> select * from t;
id name subject grade
12 zorro 英語 75
11 pg 英語 90
10 blues 英語
9 seker 英語 60
8 zorro 數學 80
7 pg 數學 80
6 blues 數學 90
5 seker 數學 75
4 zorro 語文 70
3 pg 語文
2 blues 語文 60
1 seker 語文 65
12 rows selected
1.行轉列
sql> select name,
2 sum(decode(subject,'語文',grade,null)) as "語文",
3 sum(decode(subject,'數學',grade,null)) as "數學",
4 sum(decode(subject,'英語',grade,null)) as "英語"
5 from t
6 group by name
7 order by name;
name 語文 數學 英語
blues 60 90
pg 80 90
seker 65 75 60
zorro 70 80 75
要求:60分以上的成績顯示為a,60分的顯示為b,60分一下的顯示為c
首先使用decode(sign())轉換分數等級
sql> select name,subject,decode(sign(grade-60),1,'a',0,'b',-1,'c') "等級" from t;
name subject 等級
zorro 英語 a
pg 英語 a
blues 英語
seker 英語 b
zorro 數學 a
pg 數學 a
blues 數學 a
seker 數學 a
zorro 語文 a
pg 語文
blues 語文 b
seker 語文 a
12 rows selected
然後行轉列:
sql> select name,
2 max(decode(subject,'語文',rank,null)) "語文",
3 max(decode(subject,'數學',rank,null)) "數學",
4 max(decode(subject,'英語',rank,null)) "英語"
5 from(select name,subject,decode(sign(grade-60),1,'a',0,'b',-1,'c') rank from t)
6 group by name;
name 語文 數學 英語
pg a a
blues b a
zorro a a a
seker a a b
查詢每門課的前三名同學的姓名,分數
sql> select subject,
2 max(decode(rank,1,name)) 第一名,
3 max(decode(rank,1,grade)) 第一名分數,
4 max(decode(rank,2,name)) 第二名,
5 max(decode(rank,2,grade)) 第二名分數,
6 max(decode(rank,3,name)) 第三名,
7 max(decode(rank,3,grade)) 第三名分數
8 from(select name,subject,grade,row_number() over(partition by subject order by grade desc) rank from t where grade is not null)
9 group by subject;
subject 第一名 第一名分數 第二名 第二名分數 第三名 第三名分數
數學 blues 90 pg 80 zorro 80
英語 pg 90 zorro 75 seker 60
語文 zorro 70 seker 65 blues 60
2.分頁查詢
查詢第6條到第10記錄
sql> select * from(select t.*,rownum rn from(select * from t)t where rownum<11) where rn>5;
id name subject grade rn
7 pg 數學 80 6
6 blues 數學 90 7
5 seker 數學 75 8
4 zorro 語文 70 9
3 pg 語文 10
mysql行轉列 subs mysql 行轉列
存在表score,記錄學生的考試成績,如下圖所示 現要求以 學生姓名,語文,數學,英語 這種格式顯示學生成績,如下圖所示 具體步驟如下 1 首先,使用case when函式輸出單個課程的成績 case when course 語文 then score end as 語文 case when cou...
mysql 動態行轉列 MySQL行轉列
比如乙個單子,多個收據單用逗號隔開,怎麼把這乙個單子所有收據單獨展示出來,行轉成列呢?方法一 這裡需要用到迴圈,首先建立乙個1 10的序列 select rownum rownum 1 as seq from select rownum 0 r,bills limit 0,10 其次依次運用 sub...
mysql行轉列怎麼用 mysql錶行轉列的用法
現在有一張score表,儲存學生每門課的成績,結構資料如下 idnamesubjectscore 1張三 語文90 2張三 數學88 3張三 外語75 4李四 語文99 5李四 數學70 6李四 外語95 7李五 語文88 8李五 數學85 9李五 外語90 現在要求列出每個學生所有課程的成績.這就...