JSON / CLOB Group运行了很长时间

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

我有一个JSON / CLOB字段,我可以从中提取数据,但每当我尝试汇总或统计数据时,它都会永远运行而不返回任何内容。以下是一个例子:

SELECT 
    FOUND_IN_MART,
    JSON_VALUE(JSON_DATA, '$.name.moduleCodesSelected[0]')  as mod_1,
    JSON_VALUE(JSON_DATA, '$.name.moduleCodesSelected[1]')  as mod_2,
    JSON_VALUE(JSON_DATA, '$.name.moduleCodesSelected[2]')  as mod_3,
    COUNT(*)
FROM TABLE t
GROUP BY
    FOUND_IN_MART,JSON_VALUE(JSON_DATA, '$.vdps.contactchannel'),
    JSON_VALUE(JSON_DATA, '$.cssr.moduleCodesSelected[0]') ,
    JSON_VALUE(JSON_DATA, '$.cssr.moduleCodesSelected[1]'), 
    JSON_VALUE(JSON_DATA, '$.cssr.moduleCodesSelected[2]') ;
sql json oracle clob
1个回答
0
投票

您按其他列进行分组,而不是选择列表。所有未聚合的列都应该是group by子句的一部分。在这种情况下,select列表包含列:

JSON_VALUE(JSON_DATA, '$.name.moduleCodesSelected[0]')  

而在group by

JSON_VALUE(JSON_DATA, '$.cssr.moduleCodesSelected[0]')

注意:namecssr。这是显示问题的dbfiddle demo(第一个查询是更正版本,第二个是你的)。

您也可以重写此查询以仅进行一次json转换,如下所示:

select found_in_mart, mod_1, mod_2, mod_3, count(*)
  from (
    select found_in_mart, 
           json_value(json_data, '$.vdps.contactchannel') contact,
           json_value(...) as mod_1,  -- choose cssr or name 
           json_value(...) as mod_2,
           json_value(...) as mod_3
      from t)
  group by found_in_mart, contact, mod_1, mod_2, mod_3

如果这没有帮助请edit你的问题并显示样本数据,这些东西允许我们复制错误的行为。最好是以dbfiddle的形式。

© www.soinside.com 2019 - 2024. All rights reserved.