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

如何编写Presto查询以查找行数组中指定sku元素的索引位置

Presto查询sku在product数组中位置的实现方案

你可以根据业务需求选择以下两种实现方式:

方案1:单行返回第一个匹配位置(适用数组内sku不重复的场景)

先用transform提取数组内所有行的productsku字段,再用array_position匹配位置,Presto数组下标默认从1开始:

SELECT 
  sku,
  product,
  -- 如果需要0开头的下标,直接在结果后减1即可
  array_position(transform(product, item -> item.productsku), sku) AS product_list_position
FROM 你的表名;

说明:如果当前sku不存在于product数组中,product_list_position返回null。

方案2:返回所有匹配位置(适用数组内可能有多个相同sku的场景)

用带ORDINALITY的UNNEST拆解数组同时获取下标,过滤出匹配的位置即可:

SELECT 
  t.sku,
  t.product,
  pos AS product_list_position,
  -- 可以按需取匹配到的product行的其他字段
  p.product_row.title AS matched_product_title
FROM 你的表名 t
-- 如果需要保留sku不存在的行,把CROSS JOIN改成LEFT JOIN
CROSS JOIN UNNEST(t.product) WITH ORDINALITY AS p(product_row, pos)
WHERE p.product_row.productsku = t.sku;

说明:如果同一个sku在product数组中出现多次,会返回多行对应每个匹配位置。

注意事项

  • 所有返回的位置默认从1开始计数,需要0起始的直接对返回的位置值减1即可
  • 如果product数组可能为空,方案1会直接返回null,方案2如果用LEFT JOIN会返回位置为null的行

内容的提问来源于stack exchange,提问作者Charles H Martin PhD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:03