我有一个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]') ;
您按其他列进行分组,而不是选择列表。所有未聚合的列都应该是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