1 2 3 4 5 6 7 8 9 10 | 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가 중복으로 들어갈 수도 있는데 어떻게 쿼리를 해야할지 모르겠네요;;
혹시 조언해주실 수 있을까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 ; |