資料庫之Case When

2021-09-07 12:18:22 字數 1679 閱讀 1265

近期幾天的工作本來組長是安排我用mindfocion畫幾個圖,本來以為難點是這個控制項的使用,可是開發的時候才發現由於資料量有點多,所以在開發的時候彙總這些資訊倒是費了我許多的功夫,最後總結一下就是寫了幾個sql語句,這裡與大家分享一下。假設有須要用的就太好了。

先說一下需求,組長讓我畫乙個圖。要求是把近期幾年的**資訊統計一下,比如2023年這個**交接了多少次,2023年多少次,總共多少次。想想也不難是吧,於是組長問我怎麼樣,我就輕鬆的接下來了。

可是曾經一直接觸的是簡單的sql語句和一些entityframework等工具,對於sql語句就真的把我難住了。寫了一天的sql語句,也是沒有達到想要的效果。後來上網看了一下,原來sql裡邊有乙個case when語句。用途

當我們在寫sql語句的時候,假設遇到這麼一種情況,就是假如。

。則。。,否則。

。比如,增加是城市是北京,就返回時中國城市,假設是東京,就返回日本城池。否則返回西歐城市。

這個請款下我們就能夠用到這個,比例如以下邊的小樣例。

select 

case when t.name = '北京' then '中國'

case when t.name = '東京' then '日本'

else '西歐'

endfrom test1 t

當然這還是乙個簡答的應用,比如我這次專案中用的casewhen的使用方法。就用到了條件篩選和sql語句,比如我要查詢2023年叫lisi的人有多少,2023年lisi的人有多少。那麼下邊的語句就能幫我簡單的實現

select to_char(t.birthday ,'yyyy'),

sum(case when to_char(t.birthday ,'yyyy')= '2014' and t.name = 'lisi' then 1

when to_char(t.birthday ,'yyyy')= '2015' and t.name = 'lisi' then 1

else 0

end) as firyear

from test1 t group by to_char(t.birthday ,'yyyy');

大家自己觀察發現我在上邊用到了group by來進行分組。由於假設沒有這個的話,查詢出來的結果例如以下圖  

可是假設使用了group by分組的話,效果例如以下

實現的效果不一樣,所以大家須要什麼樣子的**。就怎麼查詢就能夠。

事實上上邊說了這麼多,好像就是乙個if...else...,可是這個是全部資料庫都能夠實現的。可是在oracle。另乙個類似於咱們的三目運算的乙個小語法。

select decode(***, 'm', 'male', 'f', 'female', 'unknown')

from employees;

當然假設咱們的邏輯簡單能夠用這個,只是邏輯略微複雜一些的建議不要用,感覺沒有casewhen的邏輯清晰,並且**的移植性也不太好。畢竟僅僅有oracle能用。

總結一下,假設我們須要在資料庫中進行邏輯推斷。不防用一下咱們的casewhen,或者oracle的decode。加上group by 效果更佳。

資料庫的case when 使用例項

需求很簡單,我有乙個部門和部門的請假申請表。表資料簡單羅列如下 申請資訊存放在sqxx這張表中,然後存放了zybm和zybm對應的部門資訊,有個部門表bmxx,想查詢開始結束時間間隔為半天的 時差小於4即可 和大於半天的 按一天算 以部門為單位的統計結果,效果如下 今天學了乙個執行語句,順利實現。感...

資料庫的case when 使用例項

需求非常easy,我有乙個部門和部門的請假申請表。表資料簡單羅列例如以下 申請資訊存放在sqxx這張表中,然後存放了zybm和zybm相應的部門資訊,有個部門表bmxx,想查詢開始結束時間間隔為半天的 時差小於4就可以 和大於半天的 按一天算 以部門為單位的統計結果,效果例如以下 今天學了乙個執行語...

資料庫之保護資料庫

一 完整性定義 分類 實體完整性 域完整性 使用者定義完整性 建立約束 主鍵 外來鍵 1 建立表的同時建立約束 1 主鍵primary key 2 外來鍵foreign key 父關鍵字在自己表中必須是主鍵 父子必須完全一樣 3 唯一unique 4 預設值default舉例create table...