列轉行:利用max(case when then)
max
---聚合函式 取最大值
(
case
course
when
'語文'
then
score
else
0
end
)
---判斷
as 語文
---別名作為列名
select`name`,
max(
case
when course='語文
'then
score
end)
as語文,
max(
case
when course='數學
'then
score
end)
as數學,
max(
case
when course='英語
'then
score
end)
as英語
合併字段顯示:利用group_cancat(course,」:」,」score」)
select`name`,
group_concat(course, ":", score)
as成績
group_concat(),手冊上說明:該函式返回帶有來自乙個組的連線的非null值的字串結果。
比較抽象,難以理解。
通俗點理解,其實是這樣的:group_concat()會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函
數引數(就是欄位名)決定。分組必須有個標準,就是根據group by指定的列進行分組。
group_concat函式應該是在內部執行了group by語句,這是我的猜測。
1.測試語句:
selectgroup_concat(`name`)
from
student
group
by`name`;
結果去查詢name中去查詢哪些值是一樣的,如果相等,就全部列出來,以逗號分割進行列出,如下:
2.測試:
selectgroup_concat(`name`)
from
student
;
select結果:
group_concat('name')
上面是否可以證明,group_concat只有與group by語句同時使用才能產生效果? 下面進行了實際測驗
3.測試常量對group_concat()的配置影響:
set @@group_concat_max_len=4
手冊中提到設定的語法是這樣的:
set [session | global] group_concat_max_len = val;
兩種有什麼區別?
set @@global.group_concat_max_len=4;
global可以省略,那麼就變成了:set @@group_concat_max_len=4;
4.使用語句
group_concat(`name`)
from
student;
結果得到:
group_concat('name')
結論:group_concat()函式需要與group by語句在一起使用,才能得到需要的效果。
原因可以這樣理解:group_concat()得到是屬於x組的所有成員(函式裡面列引數指定需要顯示哪些字段)。x組從**來?如
果沒有group by進行指定,那麼根本不知道group_concat()根據哪個分組進行顯示出成員。 所以,像上面沒有group by子句
的時候,就顯示了劉備,關羽,張飛,劉備,關羽,張飛,劉備,關羽,張飛。
實際中什麼時候需要用到這個函式?
假如需要查詢的結果是這樣:左邊顯示組名,右邊想顯示該組別下的所有成員資訊。用這個函式,就可以省去很多事情了。
另外,假如我這樣使用:
select`name`,
group_concat(course, ":", score)
as成績
from
student
;
意義不大。
group_concat()指定乙個列是最好的情況。如果指定了多個列。
select`name`,
group_concat(course, ":", score)
as成績
from
student
group
by`name`;
那麼顯示結果類似這樣:
mysql行列轉換 mysql行列轉換
1.一維轉二維 上圖為成績表中資料,現希望將資料轉換為下圖。靜態 轉化為二維表後的列名及列數是確定不變的,本例中即course只有數學 語文 英語這三門課。select s name,max if course 數學 score,0 as 數學,max if course 語文 score,0 as...
mysql行列轉換例子 mysql行列轉換示例
現把轉換方法列舉如下 1 縱表轉橫表 縱表結構 tablea name course grade 張三語文 張三數學 張三英語 李四語文 李四數學 橫表結構 tableb name 語文數學 英語張三 李四方法一 select name,sum case course when 語文 then gr...
MySQL 行列轉換
最近在慕課上 看mysql教程 裡面關於行轉列的教程不錯 貼上練習sql 做個記錄 簡單行轉列 select a.user name,sum b.kills from user1 a join user kills b on a.id b.user id group by user name cro...