MySql列轉為行

2021-08-08 00:01:32 字數 2794 閱讀 5909

前一天,在技術群有人提出乙個問題,如下圖所示

問第七題該這麼做?

我研究了大概20分鐘左右,這是很典型的將列轉為行的sql。

以下是主要步驟

第一步,我建立了表sales

drop

table

ifexists

`sales`;

create

table

`sales` (

`year`

int(255) default

null,

`quarter`

int(255) default

null,

`amount`

int(255) default

null

) engine=innodb default charset=utf8;

insert

into

`sales`

values ('1991', '1', '11');

insert

into

`sales`

values ('1991', '2', '12');

insert

into

`sales`

values ('1991', '3', '13');

insert

into

`sales`

values ('1991', '4', '14');

insert

into

`sales`

values ('1992', '1', '21');

insert

into

`sales`

values ('1992', '2', '22');

insert

into

`sales`

values ('1992', '3', '23');

insert

into

`sales`

values ('1992', '4', '24');

第二步,利用max(case ... when ... then)語法來使其轉為行

select

year,

max(case quarter when

'1'then amount else

0end)第一季度,

max(case quarter when

'2'then amount else

0end)第二季度,

max(case quarter when

'3'then amount else

0end)第三季度,

max(case quarter when

'4'then amount else

0end)第四季度

from sales

group

byyear;

可以得出結果如下圖所示

但是有的同學可能會像我一樣,第一次漏掉了

group

by year;

這句語法,那麼產生結果便是如下圖所示了,

這裡只把2023年的查詢出來,最終要的是每個季度下面的amount都是2023年四個季度,這是為什麼呢?

來,讓我們把max語法去掉

select

year,

(case quarter when

'1'then amount else

0end)第一季度,

(case quarter when

'2'then amount else

0end)第二季度,

(case quarter when

'3'then amount else

0end)第三季度,

(case quarter when

'4'then amount else

0end)第四季度

from sales

查詢結果如下:

所以可以看出這裡的max作用是選出每一列的最大數,很明顯最大數都是紅圈圈的,並且每一列都僅僅只有乙個最大數,這也就是為什麼

只出現2023年一行資料的原因

而去掉max便出現了8行資料,因為並未限定條件。

所以加上group by,也就意味著按年分組,所以會選出

2023年各個季度最大的資料

2023年各個季度最大的資料

這也是max(case ... when ... then)的妙用。

mysql列邊行 mysql 行轉列 列轉行

group concat 函式說明 手冊上說明 該函式返回帶有來自乙個組的連線的非null值的字串結果 通俗點理解,其實是這樣的 group concat 會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函式引數 就是欄位名 決定。分組必須有個標準,就是根據group by指定的列...

Sql 怎樣將某個列轉為行,實

如下圖,的任務就是將圖一轉為圖二 此功能在pb中的交叉報表也可實現 編寫此段 是因為今天遇到客戶有這個需求,自己覺得可以挑戰一下,就嘗試做下來了 如下 create table patient result temp patient code nvarchar 100 date test datet...

mysql列連線 Mysql行連線,列連線

關係型資料庫在應用時,有時想把結果進行一些連線,包括行連線,列連線等有時都會用到。本文介紹幾個常用的mysql連線函式。在此基礎上,可以實現較豐富的mysql查詢。concat 關聯式資料庫查詢時有時希望把查詢結果進行連線,常使用concat實現。concat string,string.conca...