中国 中国湖南 长沙 男 200
中国 中国湖南 湘潭 男 800
。。
==================================
以上是基础数据,形成下面的统计数据的样式
=====================================
中国 中国湖南 男 1000
中国 中国湖南 女 500
中国 中国湖南 1500
中国 中国广州 男 2000
中国 中国广州 女 800
中国 中国广州 2800谢谢了
中国 中国湖南 湘潭 男 800
。。
==================================
以上是基础数据,形成下面的统计数据的样式
=====================================
中国 中国湖南 男 1000
中国 中国湖南 女 500
中国 中国湖南 1500
中国 中国广州 男 2000
中国 中国广州 女 800
中国 中国广州 2800谢谢了
-------to 楼主为什么要这样统计呢,按国家 地区 男 女 总计来区分不是更好,sql也容易写啊
-------------------- -------------------- -------------------- ---- ----------
中国 中国湖南 长沙 男 200
中国 中国湖南 长沙 女 300
中国 中国湖南 湘潭 男 400
中国 中国广东 广州 男 500
中国 中国广东 广州 女 600
中国 中国广东 深圳 男 700
中国 中国江苏 南京 男 800
中国 中国江苏 南京 女 600
中国 中国江苏 苏州 男 800
中国 中国江苏 苏州 女 1200
中国 中国湖南 湘潭 女 1500
中国 中国广东 深圳 女 40012 rows selectedSQL> select country,province,sex,sum(num) from t
2 group by rollup(country,province,sex)
3 having grouping_id(country,province,sex) <2
4 /COUNTRY PROVINCE SEX SUM(NUM)
-------------------- -------------------- ---- ----------
中国 中国广东 男 1200
中国 中国广东 女 1000
中国 中国广东 2200
中国 中国湖南 男 600
中国 中国湖南 女 1800
中国 中国湖南 2400
中国 中国江苏 男 1600
中国 中国江苏 女 1800
中国 中国江苏 34009 rows selected
如果一个省的城市中只有一个性别,不知道行不行。
SQL> select * from t;COUNTRY PROVINCE CITY SEX NUM
-------------------- -------------------- -------------------- ---- ----------
中国 中国湖南 长沙 男 200
中国 中国湖南 长沙 女 300
中国 中国湖南 湘潭 男 400
中国 中国广东 广州 男 500
中国 中国广东 广州 女 600
中国 中国广东 深圳 男 700
中国 中国江苏 南京 男 800
中国 中国江苏 南京 女 600
中国 中国江苏 苏州 男 800
中国 中国江苏 苏州 女 1200
中国 中国湖南 湘潭 女 1500
中国 中国广东 深圳 女 400
美国 佛罗里达洲 11 男 2312
美国 佛罗里达洲 11 女 135714 rows selectedSQL> select country,province,sex,sum(num) from t
2 group by rollup(country,province,sex)
3 /COUNTRY PROVINCE SEX SUM(NUM)
-------------------- -------------------- ---- ----------
美国 佛罗里达洲 男 2312
美国 佛罗里达洲 女 1357
美国 佛罗里达洲 3669
美国 3669
中国 中国广东 男 1200
中国 中国广东 女 1000
中国 中国广东 2200
中国 中国湖南 男 600
中国 中国湖南 女 1800
中国 中国湖南 2400
中国 中国江苏 男 1600
中国 中国江苏 女 1800
中国 中国江苏 3400
中国 8000
1166915 rows selected
如果城市只有1个性别,则统计的时候只会显示1个性别,不过合计还是会有的SQL>
4 /COUNTRY PROVINCE SEX SUM(NUM)
-------------------- -------------------- ---- ----------
美国 佛罗里达洲 男 2312
美国 佛罗里达洲 女 1357
美国 佛罗里达洲 3669
中国 中国广东 男 1200
中国 中国广东 女 1000
中国 中国广东 2200
中国 中国湖南 男 600
中国 中国湖南 女 1800
中国 中国湖南 2400
中国 中国江苏 男 1600
中国 中国江苏 女 1800
中国 中国江苏 3400
中国 中国上海 男 123213
中国 中国上海 123213
grouping_id(country,province,sex) 应该有8种组合,依次是
country,province,sex
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
上面8种组合依次代表0-7,如果纪录中country,province,sex中sex为空时,则对应编码为1,country,province不为空则对应编码为0,那么grouping_id(country,province,sex)的值为2进制001,也就是1,它代表的也是国家的一个省的合计即
country province sex
中国 中国广东 (null) 2200
如果是下面这条纪录的话,grouping_id(country,province,sex)就为011,即3,是国家的合计
country province sex
中国 (null) (null) 8000这里不会出现这8种组合,你可以试试用cube(country,province,sex)这样8种组合应该会都出现,事实上,这里计算grouping_id并不是按空值来判断的,因为计算省合计的时候,性别有男和女2种,所以统计的时候性别列就为空,相应的grouping_id编码也就为1,就算原始纪录中存在相应列为空也不会影响grouping_id的值