数据库为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%
山东 .... .... ........ ... ........ ....请各位赐教!
解决方案 »
- oracle分号的问题
- Report Builder 汇总列引用问题
- 求SQL语句,查询时将两列的内容相互合并输出,谢谢各路高手帮忙
- 有关行列转换的性能问题,高手请进!
- 在java中怎么样将一个字符串传给一个存储过程
- 初学 PL/SQL 请教一个函数实现IP地址转换。。 100分
- 请教一个SQL的问题??
- data型的字段只能用'YYYY-MM-DD HH24:Mi:SS'这种格式输入,但在数据库里显示的却是03-7月 -20?
- 偶不懂Oracle,问一问:Oracel 9 和 Oracle 9i这个版本有区别吗?
- 请问oracle中的监听器是什么??
- 如何用sql显示一个指定时间段的日期队列
- 如何优化oracle的sql语句
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 将很吃力.只提供参考,谢谢.