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
;
아... 이렇게 하면 되는군여;;
감사합니다