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

如何从Snowflake嵌套JSON坐标字段中提取经纬度最大最小值

实现思路

你之前的写法无效是因为MIN()函数需要作用于单值的多行数据集,不能直接对JSON数组做聚合计算,需要先把嵌套坐标数组拆分为单个坐标点的行级数据,再分别提取经纬度计算极值。

完整SQL示例

假设你的表名为YOUR_TABLE,且表内有id字段作为每行的唯一标识:

WITH point_extract AS (
  SELECT
    t.id,
    -- 提取单个坐标点的经度(坐标数组第0位)、纬度(坐标数组第1位)
    f.value[0]::FLOAT AS longitude,
    f.value[1]::FLOAT AS latitude
  FROM YOUR_TABLE t,
  -- 拆分多边形外环的坐标数组为单行坐标点
  LATERAL FLATTEN(input => t.ZONE:coordinates[0]) f
)
SELECT
  id,
  -- 拼接为要求的输出格式
  'MIN: ' || MIN(longitude) || ',' || MIN(latitude) AS min_coords,
  'MAX: ' || MAX(longitude) || ',' || MAX(latitude) AS max_coords
FROM point_extract
GROUP BY id;

特殊场景适配

如果你存储的多边形存在内环,需要将所有环的坐标纳入极值计算,调整FLATTEN逻辑遍历所有环即可:

WITH ring_extract AS (
  SELECT
    t.id,
    r.value AS ring_coords
  FROM YOUR_TABLE t,
  LATERAL FLATTEN(input => t.ZONE:coordinates) r
),
point_extract AS (
  SELECT
    id,
    f.value[0]::FLOAT AS longitude,
    f.value[1]::FLOAT AS latitude
  FROM ring_extract,
  LATERAL FLATTEN(input => ring_coords) f
)
SELECT
  id,
  'MIN: ' || MIN(longitude) || ',' || MIN(latitude) AS min_coords,
  'MAX: ' || MAX(longitude) || ',' || MAX(latitude) AS max_coords
FROM point_extract
GROUP BY id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:57:01