我有一个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]') ;
答案 0 :(得分:0)
您正在按选择列表中以外的其他列分组。所有未聚合的列应成为group by
子句的一部分。在这种情况下,select
列表包含列:
JSON_VALUE(JSON_DATA, '$.name.moduleCodesSelected[0]')
在group by
期间:
JSON_VALUE(JSON_DATA, '$.cssr.moduleCodesSelected[0]')
通知:name
与cssr
。这是显示问题的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