按年龄统计SQL问题

520NET 2012-02-02 04:19:57
年 龄 人数
16岁及以下
17岁
...
...
...
20岁
21岁及以上

请问SQL怎么写,谢谢!
...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
x_smooth 2012-03-01
  • 打赏
  • 举报
回复
楼主可以考虑用这个:
create table tmp_zt_test1(id number(4),age number(3));
insert into tmp_zt_test1 values(1,13);
insert into tmp_zt_test1 values(2,23);
insert into tmp_zt_test1 values(3,20);
insert into tmp_zt_test1 values(4,16);
insert into tmp_zt_test1 values(5,17);
insert into tmp_zt_test1 values(6,24);
insert into tmp_zt_test1 values(7,11);
insert into tmp_zt_test1 values(8,18);
insert into tmp_zt_test1 values(9,33);

select case when age<=16 then '16岁及以下'
when age>=21 then '21岁及以上'
else to_char(age) end age
,count(*) rn
from tmp_zt_test1 group by case when age<=16 then '16岁及以下'
when age>=21 then '21岁及以上'
else to_char(age) end order by 1;
20804036 2012-03-01
  • 打赏
  • 举报
回复
select .....
from (
select age from (
select rownum age from dual connect by level <= 21)
where age >=16 and age <=21) A,
T B
where ......
buryMyLove 2012-02-10
  • 打赏
  • 举报
回复
好典型的case when 行转列
  • 打赏
  • 举报
回复
这个 只能把年龄段分开查询 应该没啥简便方法能简单的一句搞定
horizonlyhw 2012-02-02
  • 打赏
  • 举报
回复
借用楼上的数据


create table tmp_zt_test1(id number(4),age number(3));

insert into tmp_zt_test1 values(1,13);
insert into tmp_zt_test1 values(2,23);
insert into tmp_zt_test1 values(3,20);
insert into tmp_zt_test1 values(4,16);
insert into tmp_zt_test1 values(5,17);
insert into tmp_zt_test1 values(6,24);
insert into tmp_zt_test1 values(7,11);
insert into tmp_zt_test1 values(8,18);
insert into tmp_zt_test1 values(9,33);



select '<= 16' a,count(1)
from tmp_zt_test1 t
where t.age <= 16

union

select to_char(t.age) a,count(1)
from tmp_zt_test1 t
group by t.age
having t.age between 17 and 20

union

select '>= 21' a,count(1)
from tmp_zt_test1 t
where t.age >= 21
order by a

salinrong 2012-02-02
  • 打赏
  • 举报
回复
create table tmp_zt_test1(id number(4),age number(3));

insert into tmp_zt_test1 values(1,13);
insert into tmp_zt_test1 values(2,23);
insert into tmp_zt_test1 values(3,20);
insert into tmp_zt_test1 values(4,16);
insert into tmp_zt_test1 values(5,17);
insert into tmp_zt_test1 values(6,24);
insert into tmp_zt_test1 values(7,11);
insert into tmp_zt_test1 values(8,18);
insert into tmp_zt_test1 values(9,33);

结果是:
num_total age
3 16
1 17
1 18
1 20
3 21
是这个需求么?
salinrong 2012-02-02
  • 打赏
  • 举报
回复
select
num_total,
age from
(SELECT
count(id) num_total
,16 as age
FROM tmp_zt_test1
WHERE age<17
union
SELECT
count(id) num_total
,21 as age
FROM tmp_zt_test1
WHERE age>21
union
select
num_total,
age from(
SELECT
count(id) num_total
,age
FROM tmp_zt_test1
where age>16
and age<21
group by age))
order by age;
dws2004 2012-02-02
  • 打赏
  • 举报
回复
select 年龄,count(1) from table
group by 年龄

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧