把國家按洲分類進行人口統計

2021-06-21 15:18:58 字數 2559 閱讀 7561

資料庫:twt001

資料表:apopu

參考文章:sql中的case when用法

case具有兩種格式。簡單case函式和case搜尋函式。     

--簡單case函式     

case ***      

when '1' then '男'      

when '2' then '女'         

else '其他' end      

--case搜尋函式         

case when *** = '1' then '男'       

when *** = '2' then '女'        

else '其他' end      

這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判斷式。還有乙個需要注意的問題,case函式只返回第乙個符合條件的值,剩下的case部分將會被自動忽略。     

--比如說,下面這段sql,你永遠無法得到「第二類」這個結果     

case when col_1 in ( 'a', 'b') then '第一類'      

when col_1 in ('a')       then '第二類'      

else'其他' end      

下面我們來看一下,使用case函式都能做些什麼事情。     

一,已知資料按照另外一種方式進行分組,分析。     

有如下資料:(為了看得更清楚,我並沒有使用國家**,而是直接用國家名作為primary key) ,以下是表內容和字段屬性

根據這個國家人口資料,統計亞洲和北美洲的人口數量。應該得到下面這個結果。     

洲人口        

亞洲1100         

北美洲250         

其他700      

想要解決這個問題,你會怎麼做?生成乙個帶有洲code的view,是乙個解決方法,但是這樣很難動態的改變統計的方式。         

如果使用case函式,sql**如下:

select  sum(population)as 洲人口,   

case country

when '中國' then '亞洲'

when '印度' then '亞洲'

when '日本' then '亞洲'

when '美國' then '北美洲'

when '加拿大' then '北美洲'

when '墨西哥' then '北美洲'

else '其他' end as 洲

from apopu

group by case country

when '中國' then '亞洲'

when '印度' then '亞洲'

when '日本' then '亞洲'

when '美國' then '北美洲'

when '加拿大' then '北美洲'

when '墨西哥' then '北美洲'

else '其他' end;

執行結果如下:

同樣的,我們也可以用這個方法來判斷工資的等級,並統計每一等級的人數。sql**如下:

select      

case when salary <= 500 then '1'

when salary > 500 and salary <= 600 then '2'

when salary > 600 and salary <= 800 then '3'

when salary > 800 and salary <= 1000 then '4'

else null end salary_class,

count(*)

from table_a

group by

case when salary <= 500 then '1'

when salary > 500 and salary <= 600 then '2'

when salary > 600 and salary <= 800 then '3'

when salary > 800 and salary <= 1000 then '4'

else null end;

奧運排序問題 按要求,給國家進行排名

題目描述 按要求,給國家進行排名 輸入描述 有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行給出m個國家號。輸出描述 排序有4種方式 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例 對每個國家給出最佳...

中國應該主動把金牌讓給其他國家

每次運動會,中國都得到大量金牌,然後作為強國的象徵。一方面是好事,另一方面,金牌數量有限,汝拿多了,別國就少拿或不拿。聽起來比賽很公平,可是呢,每次這樣,別國心裡顯然是不滿的。然後呢,必然影響兩國關係,特別是無法成為盟友。汝是大國,金牌都跟小弟搶,誰肯當汝之小弟?所以,吾建議 想方設法把金牌讓給某些...

2020 08 28測試按開發階段分

單元測試 定義 單元測試是用來對乙個模組 乙個函式或者乙個類來進行正確性檢驗的測試工作。單元測試從長期來看,可以提高 質量,減少維護成本,降低重構難度。但是從短期來看,加大了工作量,對於進度緊張的專案中的開發人員來說,可能會成為不少的負擔。需要進行單元測試的 1 邏輯複雜的 2 容易出錯的 3 不易...