SQL 중급 정리(1)

hhyun·2024년 10월 28일

[SQL]

목록 보기
19/20

🌟 COUNT

SELECT COUNT(*) FROM sample;
🍀 DISTINCT : 중복 제거

🌟 SUM

SELECT SUM(PRICE) FROM sample;

🌟 AVG

SELECT AVG(PRICE) FROM sample;
📌 평균을 구할때 주의할 점
NULL값을 0으로 취급하고 계산할 경우
SELECT SUM(PRICE)/COUNT(*)
FROM sample;

🌟 MAX

SELECT MAX(PRICE) FROM sample;

🌟 MIN

SELECT MIN(PRICE) FROM sample;

💭 전체

SELECT COUNT(Price),SUM(Price),AVG(Price),MAX(Price),MIN(Price)
FROM sample;

🌟 GROUP BY

공급자별로 평균 가격을 확인하는 쿼리
어떤 공급자는 상대적으로 조금 싼 물건들을 파는구나를 확인
SELECT SupplierID, AVG(Price)
FROM Products
GROUP BY SupplierID

공급자별로 어떤 카테고리로 평균 가격을 확인하는 쿼리

어떤 공급자가 어떤 카테고리에서 비싼 물건들을 파는지, 싼 물건들을 파는지 확인
SELECT SupplierID
  	 , Categoryid
     , AVG(Price) AS Price
FROM Products
GROUP BY SupplierID, Categoryid
SELECT SupplierID
  	 , Categoryid
     , AVG(Price) AS Price
FROM Products
GROUP BY 1,2 --이런식으로도 가능

나온 결과에서도 AVG(Price)이 100불 이상인 경우

HAVING절을 이용해야 실행순서가 맞아 원하는 값 추출
SELECT SupplierID
	 , CategoryID
     , AVG(Price)
FROM Products
GROUP BY SupplierID, CategoryID
HAVING AVG(PRICE) >= 100

ALIAS 사용해도 가능

SELECT SupplierID
	 , CategoryID
     , AVG(Price) AS avg_price
FROM Products
GROUP BY SupplierID, CategoryID
HAVING avg_price >= 100

🌟 ORDER BY

평균 가격 오름차순
SELECT SupplierID
	 , CategoryID
     , AVG(Price)
FROM Products
GROUP BY SupplierID, CategoryID
ORDER BY AVG(Price);
평균 가격 내림차순
SELECT SupplierID
	 , CategoryID
     , AVG(Price)
FROM Products
GROUP BY SupplierID, CategoryID
ORDER BY AVG(Price) DESC;

💭 문제풀이

[해커랭크_문제] Top earners

/*
1. SALARY * MONTHS = EARNINGS
2. 각 EARNING 별로 몇 명이 그만큼 벌었는지 계산 (5000,3 / 10000, 2) -> GROUP BY 이용
3. EARNING중에 가장 큰 값을 가져온다.-> ORDER BY, LIMIT
*/
SELECT (SALARY*MONTHS) AS EARNINGS 
     , COUNT(*)
FROM EMPLOYEE
GROUP BY EARNINGS
ORDER BY EARNINGS DESC
LIMIT 1
📌 포인트
CEIL() : 올림
SELECT CEIL(5.5)  -- 결과:6
FLOOR() : 내림
SELECT FLOOR(5.5) -- 결과:5
ROUND() : 반올림
SELECT ROUND(5.556506,4) -- 결과:5.5565

0개의 댓글