日期:2014-05-16  浏览次数:20771 次

谁能和我讲解下以下SQL语句在ORACLE中是怎么执行的。先执行什么,后执行什么等?
有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key) 
国家(country)人口(population)
中国600 
美国100 
加拿大100 
英国200 
法国300 
日本250 
德国200 
墨西哥50 
印度250 

根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲人口
亚洲1100 
北美洲250 
其他700 

想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
如果使用Case函数,SQL代码如下: 
SQL code
SELECT  SUM(population), 
        CASE country 
                WHEN '中国'     THEN '亚洲' 
                WHEN '印度'     THEN '亚洲' 
                WHEN '日本'     THEN '亚洲' 
                WHEN '美国'     THEN '北美洲' 
                WHEN '加拿大'  THEN '北美洲' 
                WHEN '墨西哥'  THEN '北美洲' 
        ELSE '其他' END 
FROM    Table_A 
GROUP BY CASE country 
                WHEN '中国'     THEN '亚洲' 
                WHEN '印度'     THEN '亚洲' 
                WHEN '日本'     THEN '亚洲' 
                WHEN '美国'     THEN '北美洲' 
                WHEN '加拿大'  THEN '北美洲' 
                WHEN '墨西哥'  THEN '北美洲' 
        ELSE '其他' END; 


这个SQL语句在ORACLE内部是怎么执行的有点疑惑。


------解决方案--------------------
从合理性以及可维护性上考虑
应该加一个表,记录国家属于哪个洲
------解决方案--------------------
先抓出每個國家屬於哪個州,在更具各個州去分組 ,匯總每個州人數
------解决方案--------------------
为什么要加一个表呢,给这个表加个字段不可以吗?
------解决方案--------------------
请楼上的明确一个问题,那个sql是怎么执行的?