近期幾天的工作本來組長是安排我用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...