数据库为oracle。表名: tbl_person(人口表)
列: id(主键)、 type(有老人、青年、儿童等)place(地区)
slq要求如下:
(一)按地区统计各地区的人口,并统计总人数,如下所示:注意,第一行还要统计全国的!地区 老人 老人所占比例 青年 青年所占比例 儿童 儿童所占比例 全国 555696647 17% 698415784 35% 1258452336 32%
北京 68989 19% 53163413 33% 258523365 31%
上海 7998 19% 53163413 33% 258523365 31%
山东 .... .... ........ ... ........ ....(二)按地区统计各地区人口,并显示各类叠加人数的人口,如下所示:注意,第一行还要统计全国的!地区 老人和儿童 老人和儿童所占比例 青年和儿童 青年和儿童所占比例 儿童和老人 儿童和老人所占比例 全国 555696647 17% 698415784 35% 1258452336 32%
北京 68989 19% 53163413 33% 258523365 31%
上海 7998 19% 53163413 33% 258523365 31%
山东 .... .... ........ ... ........ ....请各位赐教!
列: id(主键)、 type(有老人、青年、儿童等)place(地区)
slq要求如下:
(一)按地区统计各地区的人口,并统计总人数,如下所示:注意,第一行还要统计全国的!地区 老人 老人所占比例 青年 青年所占比例 儿童 儿童所占比例 全国 555696647 17% 698415784 35% 1258452336 32%
北京 68989 19% 53163413 33% 258523365 31%
上海 7998 19% 53163413 33% 258523365 31%
山东 .... .... ........ ... ........ ....(二)按地区统计各地区人口,并显示各类叠加人数的人口,如下所示:注意,第一行还要统计全国的!地区 老人和儿童 老人和儿童所占比例 青年和儿童 青年和儿童所占比例 儿童和老人 儿童和老人所占比例 全国 555696647 17% 698415784 35% 1258452336 32%
北京 68989 19% 53163413 33% 258523365 31%
上海 7998 19% 53163413 33% 258523365 31%
山东 .... .... ........ ... ........ ....请各位赐教!
select '全国' "地区", sum(decode(type, '老人', 1, 0)) '老人', (sum(decode(type, '老人', 1, 0))/count(1))*100||'%' "老人所占比例", sum(decode(type, '青年', 1, 0)) '青年', (sum(decode(type, '青年', 1, 0))/count(1))*100||'%' "青年所占比例", sum(decode(type, '儿童', 1, 0)) '儿童', (sum(decode(type, '儿童', 1, 0))/count(1))*100||'%' "儿童所占比例" from tbl_person
union
select place "地区", sum(decode(type, '老人', 1, 0)) '老人', (sum(decode(type, '老人', 1, 0))/count(1))*100||'%' "老人所占比例", sum(decode(type, '青年', 1, 0)) '青年', (sum(decode(type, '青年', 1, 0))/count(1))*100||'%' "青年所占比例", sum(decode(type, '儿童', 1, 0)) '儿童', (sum(decode(type, '儿童', 1, 0))/count(1))*100||'%' "儿童所占比例" from tbl_person group place
第二个和第一个类似的方式不过是
sum(decode(type, '老人', 1, 0)) '老人'
改成
sum(decode(type, '老人', 1, '儿童', 1, 0)) '老人和儿童'(sum(decode(type, '老人', 1, 0))/count(1))*100||'%' "老人所占比例"
改成
(sum(decode(type, '老人', 1, '儿童', 1, 0))/count(1))*100||'%' "老人和儿童所占比例"
如果type只有这几个选择,inthirties 的已经解决问题了
幸好,你只是有两个纬度,分别是区域以及年龄化,假如再多的纬度的话,写SQL 将很吃力.只提供参考,谢谢.