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;
'DB > SQL' 카테고리의 다른 글
SQL :: 식별자 관계와 비식별자 관계 (0) | 2024.04.27 |
---|---|
SQL :: GROUP BY, HAVING (2) | 2024.04.26 |
SQL :: OUTER JOIN (0) | 2024.04.26 |
SQL :: INNER, CROSS, NATURAL JOIN (0) | 2024.04.25 |
SQL :: 내장함수(STORED FUNCTION) (0) | 2024.04.25 |