SELECT COUNT(CASE WHEN (json_value(log_data,'$.aaa_0') = '20074' OR json_value(log_data,'$.aaa_1') = '20074' OR json_value(log_data,'$.aaa_2') = '20074' OR json_value(log_data,'$.aaa_3') = '20074' OR json_value(log_data,'$.aaa_4') = '20074' OR json_value(log_data,'$.aaa_5') = '20074') THEN 1 END) AS log_cnt FROM log where reg_date BETWEEN str_to_date('20230910', '%Y%m%d%H%i%s') AND DATE_ADD(str_to_date('20230911', '%Y%m%d%H%i%s'), interval 1 day) group by userKey
userLog에 데이터가 JSON 형식으로 저장되어 있는 상태에서
aaa_0, aaa_1, aaa_2, aaa_3, aaa_4, aaa_5 키에 같은 값으로 조회해야하는 상황입니다
문제는 aaa_0 = '20074', aaa_1 = '20074', aaa_2 = '20074', aaa_3 = '20075', aaa_4 = '20075', aaa_5 = '20075'
이런식으로 여러필드에 20074가 중복으로 들어갈 수도 있는데 어떻게 쿼리를 해야할지 모르겠네요;;
혹시 조언해주실 수 있을까요?
SELECT userKey , SUM( CASE WHEN json_value(log_data, '$.aaa_0') = '20074' THEN 1 ELSE 0 END + CASE WHEN json_value(log_data, '$.aaa_1') = '20074' THEN 1 ELSE 0 END + CASE WHEN json_value(log_data, '$.aaa_2') = '20074' THEN 1 ELSE 0 END + CASE WHEN json_value(log_data, '$.aaa_3') = '20074' THEN 1 ELSE 0 END + CASE WHEN json_value(log_data, '$.aaa_4') = '20074' THEN 1 ELSE 0 END + CASE WHEN json_value(log_data, '$.aaa_5') = '20074' THEN 1 ELSE 0 END ) AS log_cnt FROM log WHERE reg_date BETWEEN str_to_date('20230910', '%Y%m%d%H%i%s') AND DATE_ADD(str_to_date('20230911', '%Y%m%d%H%i%s'), interval 1 day) GROUP BY userKey ;