如何为PostgreSQL中的JSON类型列分配预定义代码(1、2、3等)?
我正在提取一个包含2000多行的表,这些行是公园的详细信息。其中一列是JSON类型 我们有大约15个这样的属性,我们也有一份文档,记录了分配给每个属性的预定义代码 提取的表中的每一行都有一组不同的属性,您可以在图像中看到这些属性。现在,我将如何为PostgreSQL中的JSON类型列分配预定义代码(1、2、3等)?,sql,arrays,postgresql,redash,Sql,Arrays,Postgresql,Redash,我正在提取一个包含2000多行的表,这些行是公园的详细信息。其中一列是JSON类型 我们有大约15个这样的属性,我们也有一份文档,记录了分配给每个属性的预定义代码 提取的表中的每一行都有一组不同的属性,您可以在图像中看到这些属性。现在,我将cast(parks.services作为文本)设置为“details”以获取特定公园的所有属性,或使用以下代码提取其中一个属性: CASE WHEN cast(parks.services AS text) LIKE '%uncovered%'
cast(parks.services作为文本)设置为“details”
以获取特定公园的所有属性,或使用以下代码提取其中一个属性:
CASE
WHEN cast(parks.services AS text) LIKE '%uncovered%' THEN '2'
WHEN cast(parks.services AS text) LIKE '%{covered%' THEN '1' END AS "details"
这一次,我需要通过分配代码来提取这些属性。举个例子,让我们说
如果有人能在这个话题上指导我,那会很有帮助的。非常感谢 您真的应该考虑规范化您的表。不要存储数组。应添加映射表以映射公园和属性代码。这使一切变得更容易,更有效
,
,以保存原始订单WITH ORDINALITY
子句创建的索引
值您应该真正考虑规范化您的表。不要存储数组。应添加映射表以映射公园和属性代码。这使一切变得更容易,更有效
,
,以保存原始订单WITH ORDINALITY
子句创建的索引
值非常感谢您的反馈。我没有处理表格的丰富经验,所以我弄错了表格。我看到这些值是一个数组,而不是JSON类型。算法(和第一条建议!)保持不变,只是将
jsonb_数组_元素_文本
更改为unest
和jsonb_agg
更改为array_agg
。非常感谢您的反馈。我没有处理表格的丰富经验,所以我弄错了表格。我看到这些值是一个数组,而不是JSON类型。算法(和第一条建议!)保持不变,只是将jsonb_数组_元素_文本
更改为unest
,将jsonb_agg
更改为array_agg
。
SELECT
t.name,
array_agg(c.code ORDER BY elems.index) as codes -- 3
FROM mytable t,
unnest(attributes) WITH ORDINALITY as elems(value, index) -- 1
JOIN codes c ON c.name = elems.value -- 2
GROUP BY t.name