Oracle数据库按十年分组统计客户数据的实现方法
按十年分组统计Oracle客户表的SQL实现
没问题,我来帮你写这个按十年分组统计的Oracle SQL语句,刚好能匹配你想要的输出结果。
核心思路
我们需要先从DOB字段中提取年份,计算出每个客户所属的十年区间,然后对每个区间统计客户数量:
- 计算十年起始年份:通过取整年份除以10的结果再乘以10,得到该年份所属十年的开头(比如1962年对应1960,1987年对应1980)
- 生成区间起止日期:把起始年份转为当年第一天,再计算出该十年的最后一天(比如1960年的十年最后一天是1969-12-31)
- 分组统计:按生成的起止日期分组,统计每组的客户数
完整SQL语句
SELECT TO_DATE(FLOOR(EXTRACT(YEAR FROM DOB)/10)*10 || '-01-01', 'YYYY-MM-DD') AS "Decade start", ADD_MONTHS(TO_DATE((FLOOR(EXTRACT(YEAR FROM DOB)/10)*10 + 9) || '-01-01', 'YYYY-MM-DD'), 12) - 1 AS "Decade end", COUNT(*) AS "No_of_customers" FROM customer GROUP BY FLOOR(EXTRACT(YEAR FROM DOB)/10)*10 ORDER BY "Decade start";
关键函数解释
EXTRACT(YEAR FROM DOB):从DOB日期字段中提取出年份数值FLOOR(EXTRACT(YEAR FROM DOB)/10)*10:对年份做取整运算,得到十年区间的起始年份(比如1961→1960,1987→1980)ADD_MONTHS(...,12)-1:用来生成十年的最后一天,比如1969-01-01加12个月是1970-01-01,减1天就得到1969-12-31
运行这个SQL后,就能得到你期望的统计结果:
| Decade end | No_of_customers |
|---|---|
| 1969-12-31 | 2 |
| 1989-12-31 | 1 |
内容的提问来源于stack exchange,提问作者user9751595
相关产品推荐
相关产品推荐

