mysql 기부 데이터 추출 경험
배경
기존 후원자 중복 검사를 위해 아래 조건의 기부 데이터를 추출을 요청받았다
기간 2022년 1월~2022년 5월 25일, 물품기증 1~4회연령대: 35세~65세성별: 여성개인정보 필요 항목이름휴대폰번호생년월일기증횟수기부금영수증 발행여부(발행/미발행)이메일주소주소(상세주소포함)우편번호
어디서 해당 정보를 확인할 수 있지?
현재는 기부,기부 공제자,배송지,회원 테이블에서 조인을 통해서 얻어야 했다.
처음에는..
아래 쿼리처럼 서브쿼리를 사용해서 특정기간에 기부했던 회원 정보를 추출했고(쿼리 A) 추출된 회원 id 로 기부 데이터를 추출했다.
(쿼리 A)
select m.*, donation_count as '기증횟수'from(SELECT member_id, count(member_id) as donation_count FROM donations as d GROUP BY member_id HAVING count(*) > 1 ) as dcinner join members as mon dc.member_id = m.id ...and donation_count between 1 and 4
(쿼리 B)
SELECTa.*,b.*,c.*FROM donations as aleft join deliveries as b on a.id = b.donation_idleft join donors as c on a.id = c.donation_idand a.member_id IN ( ... m.id 컬럼만 추출되도로 쿼리 A 를 수정 후 입력 )
(쿼리 A) 의 경우 서브쿼리를 썼는데 하나의 쿼리에서 같은 테이블을 여러번 써서 겨우 데이터를 추출했다.
다시 찾아보니 서브쿼리를 쓰지 않고 group by
를 써서 기부횟수
를 구할 수 있었다.
(쿼리 C)
selectm.*,count(m.id) as '기증횟수'from donations as dinner join members as mon d.member_id = m.idand ...group by m.idhaving count(m.id) between 1 and 4
(쿼리 C) 처럼 group by m.id having count(m.id) between 1 and 4
회원당 기부 횟수를 알 수 있고 having 써서 조건까지 걸 수 있다.
20221102 GROUP BY 확장
scheduled_date 는 20220912 의 형태의 string 이다 년월로 group 를 만들어서 년/월에 예약된 발송건수를 알 수 있다
SELECT DATE_FORMAT(scheduled_date,'%Y%m') yearAndMonth ,COUNT(*) countFROM `news`GROUP BY DATE_FORMAT(scheduled_date,'%Y%m')HAVING yearAndMonth is not null;
yearAndMonth | count |
---|---|
202209 | 6 |
202211 | 1 |
group by having
https://m.blog.naver.com/kim87838/110157966081 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=battledocho&logNo=220034040242 https://wikidocs.net/132671