LITTLE BY LITTLE

[3] SQL로 분석하고 Tableau로 시각화하자 - 예제 본문

시각화/SQL로 분석하고 Tableau로 시각화하자

[3] SQL로 분석하고 Tableau로 시각화하자 - 예제

위나 2022. 7. 12. 08:52

예제 풀어보기

 

Q01.

 

a. [Order]테이블의 모든 열을 조회하여라.

 

USE EDU
SELECT * FROM [Order]

 

b.[shop_code]는 30이상으로만 필터하여라.

 

SELECT * FROM [Order] 

WHERE shop_code>=30

 

- SELECT * FROM [TABLE]

- 전부다 보는거긴 보는건데, WHERE을 사용해서 조회할 열을 설정

 

c.[mem_no]별 [sales_amt]합계를 구하여라. (SUM(sales_amt)의 열 이름은 tot_amt)

 

SELECT mem_no 
,SUM(sales_amt) AS tot_amt
FROM [Order]
WHERE shop_code>=30
GROUP

 

 

- BY mem_no --"~~별로 구하여라"

- 해당되는 컬럼만 select해야한다.

- GROUP BY 해당되는 컬럼 을 마지막에 해주어야한다.


d. [sales_amt]합계가 100000 이상으로만 필터하여라.


--내 오답 

SELECT * FROM [Order]
WHERE SUM(sales_amt)>100,000


--정답

SELECT mem_no
,SUM(sales_amt) AS tot_amt
FROM [Order]
WHERE shop_code>=30
GROUP
BY mem_no /*여기까지 위3번 답과 동일*/
HAVING SUM(sales_amt)>=100000 /*Having은 Groupby 된 테이블을 특정 조건으로 필터하는 명령어이다.*/

 

e.[sales_amt] 합계가 높은 순으로 정렬하여라.

 

- 위에서 배운 예시 다시 보기 (SELECT->COUNT->FROM->WHERE->GROUP BY->HAVING->ORDER BY)

 

- Having은 Groupby 된 테이블을 특정 조건으로 필터하는 명령어

 

SELECT addr
 ,COUNT(mem_no) AS [회원수집계]
 FROM [Member]
 WHERE gender = 'man'
 GROUP
 BY addr
HAVING COUNT(mem_no) >=50
 ORDER
BY COUNT(mem_no) DESC

 

-- 다시 예제로 돌아와서

 

SELECT mem_no
,SUM(sales_amt) AS tot_amt
FROM [Order]
WHERE shop_code>=30
GROUP
BY mem_no
HAVING SUM(sales_amt)>=100000
ORDER BY SUM(sales_amt) DESC

Q02.

 

a.[Order]테이블 기준으로 [Member] 테이블을 LEFT JOIN하여라.

 

SELECT *
FROM [Order] A
LEFT
JOIN [Member] B
ON A.mem_no = B.mem_no

 

b.[gender]별 [sales_amt]합계를 구하여라.

 


--내 오답

SELECT gender
,SUM(sales_amt) AS tot_amt 
FROM [Order]
GROUP 
BY gender


--정답

SELECT B.gender
,SUM(sales_amt) AS tot_amt
FROM [Order] A
LEFT
JOIN [Member] B
ON A.mem_no = B.mem_no
GROUP
BY B.gender


c.[gender],[addr]별 [sales_amt]합계를 구하여라.

 

SELECT B.gender,B.addr
,SUM(sales_amt) AS tot_amt
FROM [Order] A
LEFT
JOIN [Member] B
ON A.mem_no = B.mem_no
GROUP
BY B.gender,B.addr

Q3.( Join, Sub query 이용 )


-- 앞에서 배운 예시1.서브쿼리(select)

SELECT *
,(SELECT gender 
FROM [Member] B
WHERE A.mem_no = B.mem_no) AS gender
FROM [Order] A


-- 앞에서 배운 예시2.서브쿼리(from)

SELECT *
FROM (
SELECT mem_no
, SUM(sales_amt) AS tot_amt
FROM [Order]
GROUP 
BY mem_no
)A
LEFT
JOIN [Member] B
ON A.mem_no = b.mem_no


-- 앞에서 배운 예시1.단일서브쿼리(where)

SELECT *
FROM [Order]
WHERE mem_no = (SELECT mem_no FROM [Member] WHERE mem_no = '1000005')


-- 앞에서 배운 예시2.다중서브쿼리(where)

SELECT *
FROM [Order]
WHERE mem_no IN (SELECT mem_no FROM [Member] WHERE gender = 'man')


a.[Order]테이블의 [mem_no]별 [sales_amt]합계를 구하여라.

 

SELECT mem_no
,SUM(sales_amt) AS tot_amt
FROM [Order]
GROUP BY mem_no


b.(a)를 FROM절 서브쿼리를 사용하여, [Member]테이블을 Left JOIN 하여라

 

SELECT *
FROM ( SELECT mem_no ,SUM(sales_amt) AS tot_amt
FROM [Order] GROUP BY mem_no)A
LEFT JOIN [Member] B
ON A.mem_no = B.mem_no


- a에서 입력한 변수별 합계를 서브쿼리 안에 전부다 넣어버림 (from select ~~)


c.[gender],[addr]별 [tot_amt]합계를 구하여라.


-- 내 오답

SELECT *
FROM (SELECT A.gender,A.addr, SUM(sales_amt) AS tot_amt
FROM [Order] GROUP BY gender,addr)A
LEFT JOIN [Member] B
ON A.mem_no = B.mem_no


-- 정답

SELECT B.gender, B.addr
,SUM(tot_amt)
FROM (SELECT mem_no,SUM(sales_amt) AS tot_amt
FROM [Order]
GROUP BY mem_no) A
LEFT JOIN [Member] B
ON A.mem_no = B.mem_no
GROUP BY B.gender,B.addr

Q04.

 

a.addr이 Seoul이 아닌 값만 조회하여라

 

SELECT *
FROM [Member]
WHERE addr <> 'seoul'


b.[gender]가 'man' 및 [ageband]가 20인 값만 조회하여라

 

SELECT *
FROM [Member]
WHERE gender = 'man' AND ageband = 20


c.[ageband]가 20~40 사이 값만 조회하여라

 

SELECT *
FROM [Member]
WHERE ageband BETWEEN 20 AND 40


d.[addr]이 'ae'를 포함하는 값만 조회하여라

 

SELECT *
FROM [Member]
WHERE addr LIKE '%ae%'


e. [sales_amt]를 0.1 곱셈하여라.(컬럼명은 fees)

 

SELECT *
,SALES_AMT * 0.1 AS fees
FROM [Order]


f. [sales_amt]에 [sales_amt]을 0.1곱셈한 값을 뺄셈하여라.(컬럼명은 Excluding_fees)

 

SELECT *
,sales_amt * 0.1 AS fees
,sales_amt - (sales_amt * 0.1) AS Excluding_fees



Comments