使用SQL语句实现每个省份内各个地市人口数的合计百分比

省份(FP_NAME) 地市名称(FC_NAME) 人口数(FPERSON_NUM)
A省 A市 20000
A省 B市 15000
A省 C市 30000
B省 A市 25000
B省 B市 37000
B省 C市 33000
C省 A市 40000
C省 B市 38000
C省 C市 42000
D省 A市 51000
D省 B市 62300
D省 C市 74500
E省 A市 24000
E省 B市 42300
E省 C市 35200
使用SQL语句实现每个省份内各个地市人口数的合计百分比。Tips:此处合计百分比即为各市人口数占全省的人口数之比。

请问有几个表呢,表结构是怎样的?
一般使用group by分组,求和即可。

答案如下:数据我没全弄进去,你可以自己补进去。只要对数据以省进行group by,然后再和原表通过省份关联即可,with部分只是构造临时视图Oracle的写法,下面查询的部分则是通用sql

with all_data as(
select 'A省' FP_NAME ,'A市' FC_NAME,  20000 FPERSON_NUM from dual
union all
select 'A省' FP_NAME ,'B市' FC_NAME, 15000  FPERSON_NUM from dual
union all
select 'A省' FP_NAME ,'C市' FC_NAME, 30000  FPERSON_NUM from dual
union all
select 'B省' FP_NAME ,'A市' FC_NAME, 25000  FPERSON_NUM from dual
union all
select 'B省' FP_NAME ,'B市' FC_NAME, 37000  FPERSON_NUM from dual
union all
select 'B省' FP_NAME ,'C市' FC_NAME,  33000 FPERSON_NUM from dual
union all
select 'C省' FP_NAME ,'A市' FC_NAME,  40000 FPERSON_NUM from dual
union all
select 'C省' FP_NAME ,'B市' FC_NAME, 38000  FPERSON_NUM from dual
)

SELECT A.FP_NAME,A.FC_NAME,ROUND(A.FPERSON_NUM/TOTAL*100,2) "PCT(%)" from all_data A,(
select FP_NAME,sum(FPERSON_NUM) TOTAL from all_data group by FP_NAME) B
WHERE A.FP_NAME = B.FP_NAME


  
  
 

结果大概如下

1    AA30.77
2    AB23.08
3    A省    C市    46.15
4    BA26.32
5    BB38.95
6    B省    C市    34.74
......