JSON / CLOB Group работает долго - PullRequest
0 голосов
/ 01 марта 2019

У меня есть поле 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 голосов
/ 02 марта 2019

Вы группируете по другим столбцам, чем в списке выбора.Все неагрегированные столбцы должны быть частью предложения group by.В этом случае список select содержит столбцы:

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

в group by:

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

Примечание: name против cssr.Вот демоверсия dbfiddle , которая показывает проблему (первый запрос - исправленная версия, второй - ваш).

Вы также можете переписать этот запрос, чтобы выполнить преобразование 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

Если это не поможет, отредактируйте свой вопрос и покажите примерданные, что позволяет нам копировать неправильное поведение.предпочтительно в виде dbfiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...