如何提取给定列中键值对的基数

问题描述 投票:0回答:1

我有一个表,其中包含两列 metric 和 dimensionName=dimensionValue 键值对,因此数据存储为:

公制 尺寸
A {x=1, y=2, z=3}
A {x=1, y=2, z=3}
A {x=2, y=2, z=3}
A {x=2, y=3, z=3}
A {x=3, y=4, z=3}

我想获得此表中涉及维度 x 和 y 的所有唯一组合,即我想将 x=1、y=2 视为第 1 行和第 2 行中的相同组合,因此最终涉及 x 和 y 的键值对的基数在此表中将是 4,因为将有 4 个 x 和 y 值的唯一组合 (x=1,y=2)、(x=2,y=2)、(x=2,y=3) 和 (x =3,y=4).

到目前为止,我尝试使用 unnest 但它给了我两列 dimensionName 和 dimensionValue 但我不确定如何获得 x 和 y 值在不同行中的唯一组合

SELECT 
  dimension_name, dimension_value 
FROM 
  "metrics" 
CROSS JOIN 
  UNNEST(dimensions) AS dimension_map(dimension_name, dimension_value) 
WHERE metric='A' AND dimension_name IN ('x', 'y');

非常感谢任何帮助。谢谢!

sql database presto
1个回答
0
投票

在Presto中,您可以通过以下步骤得到您想要的结果:

  1. 使用映射键和Presto下标运算符获取(x,y)维度值并将它们存储在2列(dim_x,dim_y)中
  2. 通过映射键(x或y)过滤任何可能没有映射值的行
  3. 使用 DISTINCT 运算符来区分输入数据中的 (dim_x, dim_y) 对。

这里是查询:

SELECT
    DISTINCT
    dimensions['x'] as dim_x,
    dimensions['y'] as dim_y 
FROM 
    "metrics"
WHERE
    metric = 'A'
AND
    dimensions['x'] IS NOT NULL
AND
    dimensions['y'] IS NOT NULL
dim_x dim_y
1 2
2 2
2 3
3 4
© www.soinside.com 2019 - 2024. All rights reserved.