You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 endNo_of_customers
1969-12-312
1989-12-311

内容的提问来源于stack exchange,提问作者user9751595

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:47:34