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

Postgres脏年龄数据:如何用单表达式计算范围平均值(适配Superset)

解决方案

可以通过纯表达式实现,无需子查询或LATERAL JOIN,核心思路是用CASE语句区分单个年龄和年龄范围的情况,分别计算平均值:

CASE
  WHEN split_part("age", ' ', 1) LIKE '%-%' THEN
    (split_part(split_part("age", ' ', 1), '-', 1)::int + split_part(split_part("age", ' ', 1), '-', 2)::int) / 2.0
  ELSE
    split_part("age", ' ', 1)::int::numeric
END

表达式说明

  1. 清理数据:用split_part("age", ' ', 1)提取核心年龄部分,自动去掉末尾的years后缀,得到纯数字或数字范围字符串。
  2. 判断数据类型:通过LIKE '%-%'识别是否为年龄范围格式。
  3. 计算代表值:
    • 若是范围格式:拆分出前后两个数字,转为整数后求和再除以2.0(用2.0保证结果为浮点型),得到范围平均值。
    • 若是单个年龄:直接转为数值型返回原年龄值。

这个表达式完全适配Superset的使用场景,不会触发集合返回函数的报错,且能准确计算出每个年龄数据的代表值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:35:13