JSON / CLOB Group通过长时间运行

时间:2019-03-01 19:56:39

标签: sql json oracle clob

我有一个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]') ;

1 个答案:

答案 0 :(得分: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的形式。