一生一代一篇文,爭教兩處銷魂。上回說到,李有爲跟着小賣部大爺,裝逼界的傳奇人物逼神阿六敦學了一招group by分組後自以爲可以縱橫天下,然而很快,他便發現人外有人、天外有天,強中還有強中手,一山還比一山高。
本以爲自己無敵於天下,可誰曾想自己卻成了《天龍八部》裏的鳩摩智,遇上了三個掛逼,一個開局滿級各種技能全部精通,一個新賬號開掛各種屬性全部加滿,一個半路盜號身上全是史詩神裝。這,怎麼打?拿頭去打?
李有爲怎麼也想不到,學完了group by之後,自己的頭上卻已被更多的烏雲籠罩。
一念至此,大爺那張笑臉又從記憶深處慢慢浮現出來,對sex字段分組,我想要展示結果的時候,把M替換成男,把N替換成女怎麼做?
顏值這個字段只是一個數字,對人沒有什麼感官上的衝擊,如果我把顏值大於等於250的妹子歸類到“舉世無雙”,把顏值大於等於220小於250的妹子歸類到“傾國傾城”,先對這些妹子進行一個範圍轉換,然後在進行分組又該怎麼做?
基礎信息表裏面有sexual_orientation(性取向)這麼一個字段,統計一下各個顏值階段的妹子的性取向情況,爲了簡單明瞭的觀察,我需要把性取向的結果放到一列做橫向對比,這個時候又該怎麼辦?
怎麼辦?大廈之將傾,總得有人出來力挽狂瀾,而這個救世主正是今天的豬腳,case when
-- case wen 有兩種用法
-- 1、簡單 case
case column
when 條件 then 返回值
when 條件 then 返回值
…………
else 不符合上述條件的返回值
end
-- 2、case 搜索函數
case
when column=條件 then 返回值
when column=條件 then 返回值
…………
else 不符合上述條件的返回值
end
-- 說明:
-- 第二種方法可以寫複雜的條件表達式,因此功能更加強大
-- 既然功能強大,我們就只講第二種,第一種瞭解即可
-- 如果滿足第一個條件,以後的就不會執行
-- 最後的else 可以省略
-- 可以用括號把case when整個代碼包起來,更優美……
case when 可以實現三種強大的功能,**1、等值轉換,2、範圍轉換,3、列轉行。**讓我們一個一個來看。
1、等值轉換
轉換sex中的M F,M爲男,F爲女
SELECT
( CASE
WHEN sex = 'M' THEN '男' ELSE '女'
END ) AS sex,
count( 1 ) as num
FROM
human_base_info
GROUP BY
sex
-- 兩種效果一樣
SELECT
( CASE
WHEN sex = 'M' THEN '男'
WHEN sex = 'F' THEN '女'
END ) AS sex,
count( 1 ) AS num
FROM
human_base_info
GROUP BY
sex
2、範圍轉換
按照顏值給美女分個類,>=250 舉世無雙 220-250 傾國傾城,200-220 國色天香 150-200 天生麗質 100-150 秀色可餐 <100秀色可餐,做好範圍值劃分之後,在進行分組計數統計
SELECT
(
CASE
WHEN looks >= 250 THEN'舉世無雙'
WHEN looks >= 220 AND looks < 250 THEN '傾國傾城'
WHEN looks >= 200 AND looks < 220 THEN '國色天香'
WHEN looks >= 150 AND looks < 200 THEN '天生麗質'
WHEN looks >= 100 AND looks < 150 THEN'秀色可餐'
WHEN looks < 100 THEN'小家碧玉'
END ) AS looks_type,
count( 1 ) AS num
FROM
human_base_info
WHERE
sex = 'F'
GROUP BY
looks_type
3、行轉列
先按照顏值進行範圍值劃分,
然後對性取向(sexual_orientation)進行判斷,如果符合的計“1”,否者爲0
最後進行分組求和統計
SELECT
(
CASE
WHEN looks >= 250 THEN'舉世無雙'
WHEN looks >= 220 AND looks < 250 THEN '傾國傾城'
WHEN looks >= 200 AND looks < 220 THEN '國色天香'
WHEN looks >= 150 AND looks < 200 THEN '天生麗質'
WHEN looks >= 100 AND looks < 150 THEN'秀色可餐'
WHEN looks < 100 THEN'小家碧玉'
END ) AS looks_type,
sum( CASE WHEN sexual_orientation = 0 THEN 1 ELSE 0 END ) AS 異性戀,
sum( CASE WHEN sexual_orientation = 1 THEN 1 ELSE 0 END ) AS 同性戀,
sum( CASE WHEN sexual_orientation = 2 THEN 1 ELSE 0 END ) AS 雙性戀,
sum( CASE WHEN sexual_orientation = 3 THEN 1 ELSE 0 END ) AS 無性戀
FROM
human_base_info
WHERE
sex = 'F'
GROUP BY
looks_type
舉世無雙,傾國傾城,國色天香,天生麗質、秀色可餐、小家碧玉,世間美女千千萬,老子高興天天換……
“醒一醒!”大爺在一旁輕輕拍了拍李有爲的腦袋,“我換你腦殼一坨鐵,才吃了一包酒鬼花生就醉成這樣了?”
"我麻煩你照一照鏡子,看一下自己現在究竟有幾斤幾兩”
這次纔是你的真實寫照……
"嗚嗚嗚……”,被大爺這麼一說,李有爲嗚咽着哭出了聲,“前輩,明天就是全校裝逼考試大會了,說好的一飛沖天,一鳴驚人呢,都考試前一天晚上了,我還是從前那個騷年,沒有一點點改變……”
"小夥子,你磨着急嘛!"大爺突然嘿嘿笑道,“真正的好戲纔剛剛上演。”
大爺口中的好戲究竟是什麼,明天的裝逼考試大會又會發生什麼,李有爲究竟能不能在裝逼大會上一鳴驚人?
預知後事如何,請聽下回分解。