Oracle使用count和case when配合統計

      在使用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

————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章