mysql列傳行查詢

2021-08-18 06:32:39 字數 1217 閱讀 7930

create table `test2` (

`name` varchar(255) default null,

`kemu` varchar(255) default null,

`chengji` int(10) default null

) engine=innodb default charset=utf8;        //建立表

insert into test2 values('張三','數學',55)

insert into test2 values('張三','語文',44)

insert into test2 values('李四','語文',66)

insert into test2 values('李四','數學',54)

insert into test2 values('王五','語文',67)

insert into test2 values('王五','數學',34)            //新增資料

select * from test2   //查詢表

select name ,sum(case kemu when '數學' then chengji else 0 end) as 數學,

sum(case kemu when '語文' then chengji end) as 語文 

from test2 group by name              //查詢

完成列換行查詢。

要點:sum(case kemu when '數學' then chengji else 0 end)  這條語句

sum()求和

case kemu when '數學' then chengji else 0 end   這個就是當kemu為『數學』時取成績,否則就不取。then chengji 就是從chengji裡取值,else 0這個我目前不清楚,但從多次實驗結果來看就像chengji與else後面的值。

當你用sum()查時,將0改為1就會使得結果+1,而用max()查時就不會變(除非小於1)。所以我在第三個字段查詢中去掉了else 0,結果不影響。我猜測這是用來防止chengji為空的情況,賦予0值。

Povit 行轉列 與UnPovit 列傳行

t sql語句中,pivot運算子用於在列和行之間對資料進行旋轉或透視轉換,pivot命令可以實現資料表的列轉行,同時執行聚合運算,unpivot則與其相反,實現資料的行轉列。pivot通過將表示式某一列中的唯一值轉換為輸出中的多個列來旋轉錶值表示式,並在必要時對最終輸出中所需的任何其餘列值執行聚合...

MySQL 行變列 查詢

sql語言的case語句備忘 概述 sql語句中的case語句與高階語言中的switch語句,是標準sql的語法,適用與乙個條件判斷有多種值的情況下分別執行不同的操作。靈活應用case語句可以使sql語句變得簡潔易讀,下面在db2環境下通過乙個簡單的查詢來展示sql case語句的強大功能。表 t ...

MySQL 首行查詢陷阱

今天在執行一條 query 的時候,發現資料庫用了6分鐘才返回資料,而這條 query 僅僅是很簡單的select from foo limit 1.foo 這個表裡有近1t的資料,但是這不應該成為返回慢的原因.有同事發現這條語句只掃瞄了1行資料,這是符合我們預期的,但是為什麼掃瞄一行資料花了6分鐘...