靈活的CASE...WHEN:SQL同時(shí)按條件計(jì)數(shù)&按條件加和

背景

  • 本鹵蛋小白一枚亮钦,刷題時(shí)被大家都說簡單的SQL難住了,題目涉及同時(shí)按條件計(jì)數(shù)和按條件加和
  • 最后靠著PureWeber大大的解答解了出來酷麦。本解法還綜合了其他帖子甚负。
  • 所以本鹵蛋打算來分享一下這道題,和一種思路窝剖。

題目

題干

上圖是了題干麻掸。簡單概括如下:

你有一個(gè)DVD租賃店的訂單信息數(shù)據(jù)表。關(guān)鍵字段有:

  • staff_id:員工工號赐纱;1是個(gè)叫Mike的家伙脊奋,2是一個(gè)叫Jon的家伙
  • rental_id: 此處可以理解為訂單編號
  • amount: 支付金額?反正是要用于加和東西但算出來又不太像??的東西
  • payment_date: 成交日期疙描,只有07年一年的數(shù)據(jù)

我們需要按月匯總這家店逐月的單量和總amount情況诚隙,同時(shí)我們也需要搞清楚Mike和Jon分別經(jīng)手了多少訂單,分別有多少amount起胰。因此久又,這就是一個(gè)既要分條件計(jì)數(shù)又要分條件加和的問題。輸出結(jié)果需要的字段如下:

要求輸出字段

PS. 這個(gè)數(shù)據(jù)庫運(yùn)行在PostgreSQL 9.6下

一種思路

以下提供一種思路

/*
https://www.pureweber.com/article/mysql-conditional-count/
*/

SELECT 
  EXTRACT(month FROM payment_date) AS month, 
  COUNT(rental_id) AS total_count, 
  SUM(amount) AS total_amount,
  COUNT(CASE WHEN staff_id=1 THEN 1 ELSE NULL END) AS mike_count,
  SUM(CASE WHEN staff_id<>1 THEN NULL ELSE (amount) END) AS mike_amount,
  COUNT(CASE WHEN staff_id=2 THEN 1 ELSE NULL END) AS jon_count,
  SUM(CASE WHEN staff_id<>2 THEN NULL ELSE (amount) END) AS jon_amount
FROM payment
GROUP BY month
ORDER BY month
  1. 這里的思路是:整體先按月匯總效五,然后具體列根據(jù)需要使用CASE...WHEN靈活處理地消;
  2. 按照PureWeber大大的思(dai)路(ma)解決按條件計(jì)數(shù)不是難事,問題在于如何在不影響原值的情況下按條件加和火俄;
  3. 這里的方法參考了這個(gè)問答犯建,使用括號帶入應(yīng)有的變量名;(當(dāng)然瓜客,當(dāng)時(shí)本蛋在碼代碼的時(shí)候蠢了适瓦,判斷邏輯明明可以是一樣的~先就這樣吧)
  4. 這個(gè)問答同時(shí)提醒我們?yōu)槭裁?a target="_blank" rel="nofollow">PureWeber在COUNT語句中使用了NULL,因?yàn)槿绻顬?確實(shí)是會(huì)計(jì)數(shù)的谱仪;
  5. SELECT后跟多個(gè)子查詢應(yīng)該也是可行的玻熙,就是麻煩,而且似乎顯得略不優(yōu)雅疯攒,因?yàn)樯婕暗叫枰啻翁崛≡路菪畔⒅孛麀

本鹵蛋在抓狂的時(shí)候還查詢了以下帖子:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗦随,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枚尼,老刑警劉巖贴浙,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異署恍,居然都是意外死亡崎溃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門盯质,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袁串,“玉大人,你說我怎么就攤上這事呼巷〈研蓿” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵王悍,是天一觀的道長破镰。 經(jīng)常有香客問我,道長压储,這世上最難降的妖魔是什么啤咽? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮渠脉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓶佳。我一直安慰自己芋膘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布霸饲。 她就那樣靜靜地躺著为朋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厚脉。 梳的紋絲不亂的頭發(fā)上习寸,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音傻工,去河邊找鬼霞溪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛中捆,可吹牛的內(nèi)容都是我干的鸯匹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼泄伪,長吁一口氣:“原來是場噩夢啊……” “哼殴蓬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蟋滴,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤染厅,失蹤者是張志新(化名)和其女友劉穎痘绎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肖粮,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孤页,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尿赚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片散庶。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凌净,靈堂內(nèi)的尸體忽然破棺而出悲龟,到底是詐尸還是另有隱情,我是刑警寧澤冰寻,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布须教,位于F島的核電站,受9級特大地震影響斩芭,放射性物質(zhì)發(fā)生泄漏轻腺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一划乖、第九天 我趴在偏房一處隱蔽的房頂上張望贬养。 院中可真熱鬧,春花似錦琴庵、人聲如沸误算。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儿礼。三九已至,卻和暖如春庆寺,著一層夾襖步出監(jiān)牢的瞬間蚊夫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工懦尝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留知纷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓导披,卻偏偏與公主長得像屈扎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子撩匕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容