티스토리 뷰
연습 문제
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 |
