1. 程式人生 > 其它 >i不知道的SQL語句的積累(sql函式的使用)

i不知道的SQL語句的積累(sql函式的使用)

技術標籤:mysql學習筆記sql

  • case…when…then
簡單的case函式:
	case sex 
	when '1' then '男'
	when '2' then '女'
	else  '未輸入' end

case搜尋函式:
	case
	when sex = '1' then '男'
	when sex = '2''then '女'
	else '未輸入' end;

case...when...then 使用場景:
#有people表如下:
id  name   sex
1   張三    1
2   李四    1
3   王五     
4   小花    2
#1.希望將表中的數字表示方式換成漢字
select id,name,sex,#(此處一定要加,相當於select id,name,sex,sex as 性別 from people;) (case sex when '1' then '男' when '2''then '女' else '未輸入' end )性別 from people; #查詢結果如下: id name sex 性別 1 張三 12 李四 13 王五 未輸入 4 小花 2#如果想省去sex,語句如下: select id, name,#(此處一定要加,)
(case sex when '1' then '男' when '2''then '女' else '未輸入' end )性別 from people case; #sum()和case結合實現分段統計 select sum(case when sex='1' then 1 else 0 end ), sum(case when sex='2' then 1 else 0 end ), sum(case when sex<>'1' and sex<>'2' then 1 else 0 end )未輸入 from people; #以下語句同樣效果 select
sum(sex='1'), sum(sex='2'), sum(sex<>'1' and sex<>'2')未輸入 from people;

結果如下:
在這裡插入圖片描述

  • 對null值的忽略
除了count(*),其他的函式基本都會忽略有null值的記錄
count(*),不會忽略null值和重複的記錄
count(表示式)忽略null值記錄
avg()函式忽略null值記錄
sum()忽略null值的記錄
值得注意的是:null''()sql中是不一樣的,如果開始性別沒輸入,這時候是個null值,
sum(case when sex<>'1' and sex<>'2' then 1 else 0 end )未輸入
語句統計的結果將會為0
改為sum(case when sex is null then 1 else 0 end )未輸入,未輸入才會被統計為1.
當sex列裡面添加了值,之後將值刪除,此時為空
sum(case when sex<>'1' and sex<>'2' then 1 else 0 end )未輸入的統計結果才為1
#count()函式和case也可同樣結合使用
select 
count(case when sex='1' then 1 end ),
count(case when sex='2' then 1 end ),
count(case when sex<>'1' and sex<>'2' then 1 end )未輸入
from people;

#以下語句效果相同:
select 
count( case when sex='1' then 1 else null end),
count( case when sex='2' then 1 else null end),
count( case when sex<>'1' and sex<>'2' then 1 else null end)未輸入
from people;
注:else後面如果不是null的話,也會參與計算,所以寫成else 0是錯誤的。
  • concat
1.concat(str1,str2,str3...)將多個字串連線成一個字串
2.concat_ws()函式,可以指定分隔符
concat_ws(separator, str1, str2, ...)
3.group_concat()函式
將group by產生的同一個分組中的值連線起來,返回一個字串結果。
  • foreach(迴圈取值,一般同in結合使用)
<select id="selectProvinceByStoreNumber" parameterType="java.util.List" resultType="cn.smb.web.store.model.StoreEntity">
    SELECT
    province,
    storeNumber
    FROM
    store
    where storeNumber in
    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

collection:傳過來的集合
item:每次迴圈將迴圈出的值放入這個變數中
open:以什麼開始
separator:用什麼分割;
close:以什麼結尾