1. SQL은 Aggregation(집계)를 할 수 있다. SUM(), AVG(), MIN(), MAX()가 대표적이다. aggregation을 결합시켜 사용할 수 있다.
2. aggregation을 결합해서 비율(ratio)을 구해보자.
예시로 전체 매출 대비 여성 유저의 매출 비율은 구해보자. 아래와 같이 샘플 테이블을 마련한다.
3. SUM(여성 매출) / SUM(전체 매출)을 구해야 한다.
- 여성 매출을 구하기 위해 gender가 female인 케이스만 골라 sales를 그래도 두고 나머지 케이스는 sales를 0으로 만든다. 그러고 sum한다.
- 전체 매출은 모든 sales 값을 sum한다.
4. 위 로직을 쿼리로 만들면 아래와 같다.
아래와 같이 결과를 확인할 수 있다.
덧) 소수점을 관리하고 싶으면 ROUND() 함수를 이용해서 조정하면 된다.
끝.
2. aggregation을 결합해서 비율(ratio)을 구해보자.
예시로 전체 매출 대비 여성 유저의 매출 비율은 구해보자. 아래와 같이 샘플 테이블을 마련한다.
1 2 3 4 5 6 7 | CREATE TABLE users(id integer, gender text, sales integer); INSERT INTO users VALUES(1, 'female', 160); INSERT INTO users VALUES(2, 'male', 170); INSERT INTO users VALUES(3, 'female', 160); INSERT INTO users VALUES(4, 'male', 190); INSERT INTO users VALUES(5, 'female', 200); |
3. SUM(여성 매출) / SUM(전체 매출)을 구해야 한다.
- 여성 매출을 구하기 위해 gender가 female인 케이스만 골라 sales를 그래도 두고 나머지 케이스는 sales를 0으로 만든다. 그러고 sum한다.
- 전체 매출은 모든 sales 값을 sum한다.
4. 위 로직을 쿼리로 만들면 아래와 같다.
1 2 3 | SELECT cast(sum(case gender when 'female' then sales else 0 end ) as float) / cast(sum(sales) as float) * 100 as ratio_female_sales FROM users ; |
아래와 같이 결과를 확인할 수 있다.
덧) 소수점을 관리하고 싶으면 ROUND() 함수를 이용해서 조정하면 된다.
끝.
댓글
댓글 쓰기