mysql 列轉行,合併字段

2021-09-11 03:49:28 字數 3005 閱讀 6659

列轉行:利用max(case when then)

max---聚合函式 取最大值

(casecoursewhen'語文'thenscoreelse0end)---判斷

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.測試語句:

select

group_concat(`name`)

from

student

group by

`name`;

結果去查詢name中去查詢哪些值是一樣的,如果相等,就全部列出來,以逗號分割進行列出,如下:

group_concat('name')

2.測試:

select

group_concat(`name`)

from

student

;

結果:

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.使用語句

select

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`;

那麼顯示結果類似這樣:

group_concat(course,":",score)

來自

mysql 列轉行,合併字段

列轉行 利用max case when then max 聚合函式 取最大值 casecoursewhen 語文 thenscoreelse0end 判斷 as 語文 別名作為列名 select name max case when course 語文 then score end as語文,max...

mysql列轉行,合併字段

列轉行 利用max case when then max 聚合函式 取最大值 casecoursewhen 語文 thenscoreelse0end 判斷 as 語文 別名作為列名 select name max case when course 語文 then score end as 語文,ma...

mysql 列轉行,合併字段

列轉行 利用max case when then max 聚合函式 取最大值 casecoursewhen 語文 thenscoreelse0end 判斷 as 語文 別名作為列名 select name max case when course 語文 then score end as語文,max...