기본 콘텐츠로 건너뛰기

라벨이 sub query인 게시물 표시

SQL Combining aggregates - 집계를 결합(비율 구하기)

1. SQL은 Aggregation(집계)를 할 수 있다. SUM(), AVG(), MIN(), MAX()가 대표적이다. aggregation을 결합시켜 사용할 수 있다. 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 ; 아래와 같이 결과를 확인할 수 있다.

SQL 결합 - JOIN, WITH, SUB QUERY

1. 2개 이상의 테이블의 column을 결합하는 방법은 여러가지가 있다. 기본적으로는 JOIN을 사용하지만, 복잡하게 결합해야 할 때에는 SUB QUERY(서브쿼리)와 WITH을 사용할 수 있다. 2. 아래와 같이 sales와 users의 샘플 테이블을 만들어 보자 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE sales_online(id integer, sales integer); INSERT INTO sales_online VALUES ( 1 , 100 ); INSERT INTO sales_online VALUES ( 2 , 170 ); INSERT INTO sales_online VALUES ( 3 , 250 ); CREATE TABLE users(id integer, last_name text); INSERT INTO users VALUES ( 1 , 'kim' ); INSERT INTO users VALUES ( 2 , 'lee' ); INSERT INTO users VALUES ( 3 , 'park' ); INSERT INTO users VALUES ( 4 , 'choi' ); INSERT INTO users VALUES ( 5 , 'han' ); 3. JOIN을 사용하여 결합해보자. JOIN의 기본이 되는 INNER JOIN을 사용해보자 1 2 3 4 5 SELECT s.id, u.last_name FROM sales_online s JOIN users u ON s.id = u.id ; 아래와 같이 잘 결합되었다. 4. SUB QUERY를 사용하여 결합해보자 1 2 3 4 5 SELECT s.id, u.last_name FROM sales_onlin