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

求助:在Microsoft SQL Server 2019中按10岁间隔分组统计客户销售额总和

按10岁间隔分组统计销售额总和(SQL Server 2019)

针对你的需求,这里提供两种在SQL Server 2019中实现按10岁间隔分组并统计销售额总和的方案:

方法一:使用FLOOR函数自动生成区间

这种方法适合规则的10岁间隔分组,无需手动枚举所有区间,代码更简洁:

SELECT
  -- 生成如"40-49"格式的年龄区间文本
  CONCAT(FLOOR(age / 10) * 10, '-', FLOOR(age / 10) * 10 + 9) AS age_group,
  -- 统计每组销售额总和
  SUM(sales_amount) AS total_sales
FROM customers -- 替换为你的实际表名
GROUP BY FLOOR(age / 10) * 10 -- 按计算后的区间起始值分组
ORDER BY age_group; -- 按区间排序

说明:

  • FLOOR(age / 10) * 10 会将年龄转换为对应区间的起始值(例如45→40,52→50)
  • 分组时使用这个计算值而非拼接后的字符串,避免因字符串排序或格式问题导致分组错误
  • 若存在年龄为0-9岁的客户,会自动生成"0-9"的区间

方法二:使用CASE语句自定义区间

如果需要对特定区间做自定义处理(例如将60岁及以上合并为一组),可以用CASE语句手动指定分组规则:

SELECT
  CASE
    WHEN age BETWEEN 0 AND 9 THEN '0-9'
    WHEN age BETWEEN 10 AND 19 THEN '10-19'
    WHEN age BETWEEN 20 AND 29 THEN '20-29'
    WHEN age BETWEEN 30 AND 39 THEN '30-39'
    WHEN age BETWEEN 40 AND 49 THEN '40-49'
    WHEN age BETWEEN 50 AND 59 THEN '50-59'
    ELSE '60+' -- 自定义60岁及以上的分组名称
  END AS age_group,
  SUM(sales_amount) AS total_sales
FROM customers -- 替换为你的实际表名
GROUP BY
  -- GROUP BY需与SELECT中的CASE逻辑完全一致
  CASE
    WHEN age BETWEEN 0 AND 9 THEN '0-9'
    WHEN age BETWEEN 10 AND 19 THEN '10-19'
    WHEN age BETWEEN 20 AND 29 THEN '20-29'
    WHEN age BETWEEN 30 AND 39 THEN '30-39'
    WHEN age BETWEEN 40 AND 49 THEN '40-49'
    WHEN age BETWEEN 50 AND 59 THEN '50-59'
    ELSE '60+'
  END
ORDER BY age_group;

注意事项:

  1. 确保age字段为数值类型(INT/DECIMAL),若存储为字符串,需先转换:CAST(age AS INT)
  2. 若存在age为NULL的记录,上述查询会自动排除;如需统计这类记录,可在CASE中添加WHEN age IS NULL THEN '未知年龄'分支
  3. 排序时,方法一可直接用ORDER BY FLOOR(age/10)*10,比字符串排序更精准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:40:35