在使用Oracle的項目中寫查詢語句,發現count搭配case when特別好用,以前沒怎麼用過,網上也找了些資料再次記錄下來
1、我們知道,SQL語句中用count函數統計記錄數量,配合distinct關鍵字可以統計非重複的記錄數量。例如:
select count(*), count(city_name), count(distinct city_name) from tb_county
查詢結果是:
count(*) | count(city_name) | count(distinct city_name) |
---|---|---|
2534 | 2534 | 363 |
增加查詢條件可以查詢不同條件下記錄的數量,例如:
select count(*), count(city_name), count(distinct city_name)
from tb_county
where xs_code like '23%'
or xs_code like '24%'
查詢結果是:
count(*) | count(city_name) | count(distinct city_name) |
---|---|---|
85 | 85 | 16 |
2、如果我們需要統計總記錄數量和某種條件下的數量,可以用 sum函數 函數和case when語句配合,例如:
select count(*),
sum(case when xs_code like '23%' or xs_code like '24%'
then 1
else 0
end)
from tb_county
查詢結果是:
count(*) | sum |
---|---|
2534 | 85 |
3、如果我們需要統計總記錄數量和某種條件下非重複的記錄數量,用上面的sum函數就不行了。這時我們可以用count函數和case when語句配合,滿足條件取字段值,否則爲空(null),因爲count函數是不統計空值的,所以可以統計該條件下的記錄數量(和上面的sum函數功能一樣),如果再配合distinct關鍵字,就可以統計該條件下非重複的記錄數量了。例如:
select count(*),count(city_name),count(distinct city_name),
count(case
when xs_code like '23%' or xs_code like '24%'
then city_name
else null
end),
count(distinct case
when xs_code like '23%' or xs_code like '24%'
then city_name
else null
end)
from tb_county
查詢結果是:
count(*) | count(city_name) | count(distinct city_name) | count(case | count(distinct case |
---|---|---|---|---|
2534 | 2534 | 363 | 85 | 16 |
這個功能在統計中很有用,尤其是我們需要統計去重複的總量和分量的時候。
上面語句中的else還可以不寫,因爲默認情況下不寫就是空值(null)。即:
select count(*),count(city_name),count(distinct city_name),
count(case
when xs_code like '23%' or xs_code like '24%'
then city_name
end),
count(distinct case
when xs_code like '23%' or xs_code like '24%'
then city_name
end)
from tb_county
————————————————