oracle用sql语句实现年龄分段统计,case when then用法(用于分类统计)

博客介绍了使用SQL对一张表按不同条件进行多次统计,提到使用case when then进行分类统计。因数据库无年龄字段,给出通过获取当年年份减去出生年计算年龄的写法,即(select to_number(to_char(sysdate, ‘yyyy’ )) from dual) - substr(csny,0,4) as age。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql 对一张表进行按照不同条件进行多次统计
在这里使用 case when then(多用于分类统计)

SELECT
	CASE
WHEN age < 30 THEN
	'30岁以下'
WHEN age BETWEEN 30
AND 35 THEN
	'30-35岁'
WHEN age BETWEEN 36
AND 40 THEN
	'36-40岁'
WHEN age > 40 THEN
	'40岁以上'
END AS NAME,
 count(*) AS count
FROM
	(
		SELECT
			(
				SELECT
					to_number (to_char(sysdate, 'yyyy'))
				FROM
					DUAL
			) - substr(csny, 0, 4) AS age
		FROM
			t_xwr_lz_grxx b,
			t_xwr_sys_user c,
			t_xwr_sys_dept d
		WHERE
			b.xm = c.user_id
		AND c.dept_id = d.dept_id
		AND (
			SELECT
				to_number (to_char(sysdate, 'yyyy'))
			FROM
				DUAL
		) - substr(csny, 0, 4) IS NOT NULL
	)
GROUP BY
	CASE
WHEN age < 30 THEN
	'30岁以下'
WHEN age BETWEEN 30
AND 35 THEN
	'30-35岁'
WHEN age BETWEEN 36
AND 40 THEN
	'36-40岁'
WHEN age > 40 THEN
	'40岁以上'
END;

解释以下:

由于数据库里没有年龄字段,这里只能由 获取当年年份 - 出生年
所有有了这个写法: 当年年份 - 出生年
(select to_number(to_char(sysdate, ‘yyyy’ )) from dual) - substr(csny,0,4) as age

结果如下所示
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值