MySql json_value 파싱질문있습니다. 0 2 1,857

by visca구루비 [MySQL] [2023.09.12 11:04:45]


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가 중복으로 들어갈 수도 있는데 어떻게 쿼리를 해야할지 모르겠네요;;

 

혹시 조언해주실 수 있을까요?

by 마농 [2023.09.12 11:30:15]
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
;

 


by visca구루비 [2023.09.12 13:43:40]

아... 이렇게 하면 되는군여;;

감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입