본문 바로가기

SQL/SQLD (개발자)

2-1. SQL 기본_(8)ORDER BY 절

제8절 ORDER BY 절

 

1. ORDER BY 정렬

  - 특정 컬럼을 기준으로 정렬하여 출력

  - 문자, 숫자, 날짜 등 정렬 가능

 

# ORDER BY 절 기본 구조 

SELECT DISTINCT 컬럼1, 컬럼2 # 다섯번째 실행 
FROM 테이블명 # 첫번째 실행 
WHERE 조건 # 두번째 실행 
GROUP BY 컬럼1, 컬럼2 # 세번째 실행
HAVING 조건 # 네번째 실행
ORDER BY 컬럼 #여섯번째 실행
SELECT BillingCountry
	, SUM(Total) AS SUM_Country
FROM Invoice
WHERE InvoiceDate BETWEEN '2007-01-01' AND '2007-12-31'
GROUP BY BillingCountry
ORDER BY SUM_Country # 기본적으로 오름차순정렬

# 정렬방식
ORDER BY 컬럼 ASC  #오름차순 정렬
ORDER BY 컬럼 DESC #내림차순 정렬

# 컬럼의 순서번호를 입력해도 ORDER BY 적용된다.
# ORDER BY 에 적힌 컬럼 순서대로 우선 정렬한다.

# BillingCountry는 오름차순으로 Total은 내림차순으로 정렬
SELECT InvoiceId, CustomerId, BillingCity, BillingCountry, Total
FROM Invoice
ORDER BY 4 ASC, Total DESC

 

2. Top N 쿼리

# SUM_Country가 높은 국가 상위 5개만 추출

# DBMS마다 행 개수 조건 함수가 다름

# 1) LIMIT
SELECT BillingCountry
	, SUM(Total) AS SUM_Country
FROM Invoice
WHERE InvoiceDate BETWEEN '2007-01-01' AND '2007-12-31'
GROUP BY BillingCountry
ORDER BY SUM_Country DESC
LIMIT 5  # 행(ROW)개수 조건


# 2) TOP 
SELECT TOP 5  # 행(ROW)개수 조건
	BillingCountry
	, SUM(Total) AS SUM_Country
FROM Invoice
WHERE InvoiceDate BETWEEN '2007-01-01' AND '2007-12-31'
GROUP BY BillingCountry
ORDER BY SUM_Country DESC


# 3) ROWNUM
SELECT BillingCountry
	, SUM(Total) AS SUM_Country
FROM Invoice
WHERE InvoiceDate BETWEEN '2007-01-01' AND '2007-12-31'
AND ROWNUM <= 5  # 행(ROW)개수 조건
GROUP BY BillingCountry
ORDER BY SUM_Country DESC