한필드의 값을 일자별로 출력 5

by 신제트 [MySQL] [2022.05.23 16:56:27]


 

table_a

idx pay date
1 0 2021-01-01
2 0 2021-01-01
3 1 2021-01-01
4 1 2021-01-02
5 2 2021-01-02
6 2 2021-01-02
7 0 2021-01-03
8 1 2021-01-03
9 2 2021-01-03

이런 테이블이 있다고 할때 pay의 방식에 따라 날짜별로 값을 합쳐볼려고 합니다 

pay의 방식은 0,1 로 현금 ,카드 등이 있습니다 각 pay 값들을 날짜 하나로 출력하고자 합니다

date pay_a pay_b
2021-01-10 9 7
2021-01-09 5 4
2021-01-08 7 5
2021-01-07 1 1
2021-01-06 2 2
2021-01-05 3 3
2021-01-04 4 4
2021-01-03 5 5
2021-01-02 6 6

 

by 마농 [2022.05.23 17:10:08]
SELECT dt
     , SUM(CASE pay WHEN 0 THEN hit END) pay_0
     , SUM(CASE pay WHEN 1 THEN hit END) pay_1
     , SUM(CASE pay WHEN 2 THEN hit END) pay_2
     , SUM(hit) tot
  FROM table_a
 WHERE dt BETWEEN '2021-01-01' AND '2021-01-10'
 GROUP BY dt
 ORDER BY dt DESC
;

 


by 신제트 [2022.05.23 17:32:23]

다 이해가 가는데 when 0은 조건절 0일때 인데 then hit end 의 뜻을 여쭤볼수 있을까요?'

then이 반환값으로 알고있는데 현 질문에서는 hit 필드에 있는 값을 사용하지 않을텐데 hit 필드의 값을 반환한다는 의미일까요? 

아 hit 필드에 그값을 반환한다는 의미일까요?


by 마농 [2022.05.24 08:10:32]

원본과 결과표의 수치가 일치하지 않아 결과표의 값이 뭘 의미하는지? 추측을 해야만 했습니다.
저는 SUM(hit) 를 하는게 아닐까? 생각했습니다.
아니라면 아래 COUNT(*) 를 원하는 걸까요?
명확한 설명과 함께 값이 일치하는 원본 대비 결과표를 제시해 주시는게 좋습니다.


by 마농 [2022.05.23 17:47:10]
SELECT dt
     , COUNT(CASE pay WHEN 0 THEN 1 END) pay_0
     , COUNT(CASE pay WHEN 1 THEN 1 END) pay_1
     , COUNT(CASE pay WHEN 2 THEN 1 END) pay_2
     , COUNT(*) tot
  FROM table_a
 WHERE dt BETWEEN '2021-01-01' AND '2021-01-10'
 GROUP BY dt
 ORDER BY dt DESC
;

 

 


by 신제트 [2022.05.24 08:47:07]

아래의 값이 맞았습니다 

다음 질문에는 좀 더 명확히 해보겠습니다 감사합니다!

 

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