+ -
当前位置:首页 → 问答吧 → sql 分类如何写?

sql 分类如何写?

时间:2010-08-25

来源:互联网

有个表里是记录用户信息,比如出生年月,
现在需要将用户按年纪分段,比如20-25岁多少人,
26-30多少人,30-35多少人,36岁以上多少人,
有什么简洁的SQL方法 ?

作者: 月光宝盒   发布时间: 2010-08-25

不知道这个是不是你想要的,以scott.emp为例,
分区段不统计
SELECT CASE
WHEN sal>=0           AND sal<1000 THEN '0~1000'
WHEN sal>=1000 AND sal<2000 THEN '1000~2000'
WHEN sal>=2000 AND sal<3000 THEN '2000~3000'
WHEN sal>=3000 AND sal<4000 THEN '3000~4000'
WHEN sal>=4000 AND sal<5000 THEN '4000~5000'
WHEN sal>=5000 AND sal<6000 THEN '5000~6000'
END "区间段",COUNT(*)
FROM scott.emp
GROUP BY (CASE
WHEN sal>=0           AND sal<1000 THEN '0~1000'
WHEN sal>=1000 AND sal<2000 THEN '1000~2000'
WHEN sal>=2000 AND sal<3000 THEN '2000~3000'
WHEN sal>=3000 AND sal<4000 THEN '3000~4000'
WHEN sal>=4000 AND sal<5000 THEN '4000~5000'
WHEN sal>=5000 AND sal<6000 THEN '5000~6000'
END);


各部门分区段统计(做小计和统计)
SELECT deptno,CASE
WHEN sal>=0           AND sal<1000 THEN '0~1000'
WHEN sal>=1000 AND sal<2000 THEN '1000~2000'
WHEN sal>=2000 AND sal<3000 THEN '2000~3000'
WHEN sal>=3000 AND sal<4000 THEN '3000~4000'
WHEN sal>=4000 AND sal<5000 THEN '4000~5000'
WHEN sal>=5000 AND sal<6000 THEN '5000~6000'
END "区间段",COUNT(*)
FROM scott.emp
GROUP BY rollup(deptno,(CASE
WHEN sal>=0           AND sal<1000 THEN '0~1000'
WHEN sal>=1000 AND sal<2000 THEN '1000~2000'
WHEN sal>=2000 AND sal<3000 THEN '2000~3000'
WHEN sal>=3000 AND sal<4000 THEN '3000~4000'
WHEN sal>=4000 AND sal<5000 THEN '4000~5000'
WHEN sal>=5000 AND sal<6000 THEN '5000~6000'
END));

作者: whm11   发布时间: 2010-08-25

多谢,可以用,我原本是想建一个VIEW。

作者: 月光宝盒   发布时间: 2010-08-25

如果经常用到,建议建立一个视图。

作者: renxiao2003   发布时间: 2010-08-25

case可能不太好看,可以考虑用
SELECT CEIL(sal/1000+0.001),COUNT(1) FROM scott.emp GROUP BY CEIL(sal/1000+0.001);
得到各区段,然后用CEIL(sal/1000+0.001)的值关联另外的表显示中文。

作者: whm11   发布时间: 2010-08-25