티스토리 뷰

SQL

[SQL] 기초 공부 2일차

iblue 2022. 1. 4. 18:04

 

연습 문제

https://www.hackerrank.com/challenges/earnings-of-employees/problem?h_r=internal-search 

 

Top Earners | HackerRank

Find the maximum amount of money earned by any employee, as well as the number of top earners (people who have earned this amount).

www.hackerrank.com

 

요구사항 1. earnings = salary * months

2. earnings의 최대값과 그 수를 구하여라

 

해결방법

1. earnings 는 사칙연산으로 구한다

2. 최대값 = max( ) 를 쓰면 되겠다고 단순히 생각함

3. 그 수 = count( )

 

문제점

max( ) 를 쓰지 않고 최대값을 어떻게 구하지?

→ ORDER BY, LIMIT 으로 데이터를 정렬했던 방법을 응용한다

 

SELECT *
FROM Customers
ORDER BY Price DESC
LIMIT 5

결과값 : Customers 테이블에서 가격이 높은(DESC) 5개(LIMIT 5) 데이터 전체

 

SELECT months*salary as earnings, count(*)
FROM employee
GROUP BY earnings
ORDER BY earnings DESC
LIMIT 1

문제 정답.

SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY - LIMIT 순서로 쓴다.

 


* WHERE 와 HAVING 의 차이

WHERE 는 테이블 전체에서 데이터 조건을 설정해준다

HAVING 은 GROUP BY 에서 추출된 공통 데이터의 조건을 설정해준다

SELECT SupplierID, CategoryID, AVG(Price)
FROM Products
GROUP BY SupplierId, CateogryID
HAVING AVG(Price) > 1000

결과값 : 평균 가격이 1000 이상인 SupplierID, CategoryID, AVG(Price)

* GROUP BY 는 여러개를 작성할 수 있다

 


* AVG 평균값 산출시 주의점

 

table : sample

ID Name Visits
1 A 1
2 B 3
3 C 2
4 NULL NULL

 

SELECT AVG(Visits)
FROM sample

결과값 : (1+3+2) / 3 = 2

 

SELECT SUM(Visits) / COUNT(*)
FROM sample

결과값 : (1+3+2) / 4 = 1.5

 

AVG( ) 는 NULL 을 제외하고 계산한다.

하지만, NULL 처리 방법에 따라 SUM( ) / COUNT(*) 으로 계산할 수도 있다.


연습 문제

https://www.hackerrank.com/challenges/what-type-of-triangle/problem?h_r=internal-search 

 

Type of Triangle | HackerRank

Query a triangle's type based on its side lengths.

www.hackerrank.com

SELECT CASE
        WHEN A=B AND B=C THEN "Equilateral"
        WHEN A+B<=C OR A+C<=B OR B+C<=A THEN "Not A Triangle"
        WHEN A=B OR B=C OR A=C THEN "Isosceles"
        ELSE "Scalene"
        END
FROM triangles

문제 포인트

1. 삼각형 달성 조건에 따라 논리연산자를 활용해 CASE ~ WHEN 구문을 사용한다

2. CASE ~ WHEN 에서 각 조건의 우선 순위를 잘 생각해야 한다 (예. "Not A Triangle" > "Isosceles")

* CASE ~ WHEN 구문 사용시 상위 조건이 하위 조건보다 앞선다/포함한다

 

주의점

CASE ~ WHEN 작동시 결과값을 보기 위해선 END, * 을 사용해 조건별 결과값을 매번 비교하자

 

SELECT AVG(CASE WHEN categoryid = 1 THEN price ELSE NULL END) AS category1_price,
       AVG(CASE WHEN categoryid = 2 THEN price ELSE NULL END) AS category2_price,
       AVG(CASE WHEN categoryid = 3 THEN price ELSE NULL END) AS category3_price
FROM products

CASE ~ WHEN 피봇팅

1. WHEN 조건 설정

2. TEHN 피봇팅하고 싶은 데이터 입력

3. ELSE NULL -> 특정 조건에 부합하는 데이터만 가져오고 싶기 때문에 그 외 데이터는 NULL 처리

4. CASE 엔 요약통계가 가능하다 AVG, SUM 등등

5. AS 별칭을 적어준다

 

'SQL' 카테고리의 다른 글

[SQL] 기초 공부 4일차  (0) 2022.01.06
[SQL] 기초 공부 3일차  (0) 2022.01.06
[SQL] 기초 공부 1일차  (0) 2021.12.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함