DB/SQL

SQL :: ORDER BY 우선 정렬 순서

관리자ID 2024. 4. 26. 23:10

 

ORDER BY

오라클에서 검색된 결과의 행을 정렬할 때는 ORDER BY 절을 사용한다. 정렬 방법에는 오름차순 정렬(ascending sort ASC)과 내림차순(descending sort DESC) 정렬 두 가지가 있다. INDEX, 컬럼, ALIAS, 함수를 기준으로 정렬할 수 있다.

 

SQL문 실행 순서는 다음과 같다

FROM절(JOIN)->WHERE절->SELECT절->ORDER BY절

따라서 어떤 구문이 쿼리에 언제 영향을 미칠 수 있는지 고려해서 쿼리문을 작성해야 한다. ORDER BY는 맨 마지막에 값에 영향을 주지 않고 정렬만을 나타낸다.

 

문법

SELECT 컬럼명
  FROM 테이블명
 WHERE 조건식 --사용시 순서
 GROUP BY 컬럼명 --사용시 순서
 ORDER BY 컬럼명1 [ASC|DESC], 컬럼명2 [ASC|DESC], 컬럼명3 [ASC|DESC]...

 

예시

SELECT TEAM_ID, PLAYER_NAME, BACK_NO
	FROM PLAYER p 
	ORDER BY BACK_NO DESC; --NULL을 가장 큰 값으로 인식. DESC (내림차순)
    
    
 SELECT TEAM_ID ID, PLAYER_NAME NAME,BACK_NO NUM, "POSITION"
 	FROM PLAYER p 
-- 	ORDER BY TEAM_ID , PLAYER_ID , PLAYER_NAME , BACK_NO; -- 컬럼명 ASC오름차순
-- 	ORDER BY BACK_NO DESC; -- 정렬은 NULL을 가장 큰 값으로 인식
-- 	ORDER BY 1,2,3;
-- 	ORDER BY ID, NAME, NUM  --Alias도 가능
--	ORDER BY TEAM_ID ,1, NUM; 


 SELECT  TEAM_ID, AVG(HEIGHT) AVG
	FROM PLAYER p
 	GROUP BY TEAM_ID
-- 	ORDER BY AVG(HEIGHT) DESC;
--	ORDER BY AVG DESC;
-- 	ORDER BY 2 DESC;

 

예시 문제

--홈팀의 승률을 구하라

SELECT t.TEAM_NAME AS "홈팀", COUNT(CASE WHEN s.HOME_SCORE > s.AWAY_SCORE
		THEN 1 END)/ COUNT(s.HOME_SCORE) AS "승률"
	FROM SCHEDULE s JOIN TEAM t
	ON s.HOMETEAM_ID = t.TEAM_ID
	GROUP BY TEAM_NAME;