우리 회사는 매주/ 매월 지표 분석을 하는데, 그때마다 어드민에서 원하는 특정 데이터값을 추출하는 게 쉽지않다.
그래서 SQL를 사용해서 기간별 특정 유저의 총 합계를 구하고 있다.
아래 내용은 내가 SQL 강의를 토대로 실제 쿼리를 작성하고 있는 방법이다.
| 미션
-- Q1. 24년 3월 내 파트너 권한을 가진 모든 유저의 총 합계를 구하시오
-- 단, 파트너는 개인 파트너 및 비즈니스 파트너 두 가지 유형이 존재함
| 먼저 해야할 것
일단, 쿼리를 짜기 전에 먼저 확인해야할 것은 해당 테이블에 어떤 컬럼이 있는 지 확인을 해야한다.
이때는 LIMIT절을 사용해서 열 개의 ROW 정도만 확인한다. 그럼 컬럼에 어떤 항목들이 어떤 타입으로 입력되어 있는지 확인할 수 있다.
SELECT *
FROM 'USER' u
LIMIT 10
| COUNT() 집계함수를 사용하기
유저의 '총 합계'를 구하는 것이니 생각나는 것, 바로 집계함수 COUNT다.
COUNT 중에서도 중복을 제외하고 싶으면 COUNT(DISTINCT)를 사용하면 된다. 하지만 난 회원의 명의가 중복될 수는 없으니, DISTINCT는 사용하지 않는다.
(하지만 아시다시피, SELECT 뒤 먼저 컬럼값을 작성하지 않는다. 보통 FROM 먼저 작성)
SELECT COUNT(*)
FROM 'USER' u
| WHERE 을 활용한 조건문 작성하기
미션을 다시 확인해 보니, 파트너 권한을 가진 모든 사람의 수를 구하라는 것이니
조건에서 먼저, ROLE(권한)이 파트너(비즈니스) 이거나 파트너(개인)인 사람을 찾는 쿼리를 작성해야 한다.
SELECT COUNT(*)
FROM `USER` u
WHERE `ROLE` IN ('ROLE_PARTNER_BUSINESS','ROLE_PARTNER_PERSONAL')
컬럼의 값이 A거나, B인 것을 찾을 때 자주 사용한다.
| 특정기간 조회하기
WHERE 조건 절은 열려있고, 특정 기간을 찾는 것 또한 조건이 되는 것이니
일단은 WHERE절 다음에 AND를 아래 작성해준다.
그리고 기간을 나타내는 컬럼을 찾는다. 우리 DB는 CREATED_AT 이었다.
그 다음, BETWEEN 가 AND 나 를 사용해서, 특정기간을 조회하면 끝! 중요한 점은 날짜 데이터 타입을 꼭 잘 확인해야한다.
어떤 테이블은 YYYY-MM-DD 까지만 작성하는 반면, 또 특정 테이블은 값이 다를 수 있기 때문이다.
SELECT COUNT(*)
FROM `USER` u
WHERE `ROLE` IN ('ROLE_PARTNER_BUSINESS','ROLE_PARTNER_PERSONAL')
AND CREATED_AT BETWEEN '2024-03-01 00:00:00.000' AND '2024-03-31 23:59:59.000'
우리 회사 데이터 타입은 이렇게 초의 초까지; 저장하고 있기 때문에
저대로 가져올 수 밖에 없었다. (그렇지 않으면 값이 조회되지 않음)
'PO로로 > 오늘도 SQL' 카테고리의 다른 글
[오늘도 SQL] GROUP BY 사용해서 요일별 합계 구하기 (0) | 2024.03.13 |
---|---|
[오늘도 SQL] ORDER BY 정렬 / 내림차순 적용하기 (1) | 2022.12.02 |
[오늘도 SQL] 중복 제거하고 조회하기 (0) | 2022.11.30 |
[오늘도 SQL] GROUP BY를 활용한 발송건수 계산 (0) | 2022.11.24 |
[오늘도 SQL] NULL인 경우 제외하고 결과값 추출하기 (0) | 2022.11.18 |