"10번 이상 구매한 VIP고객 리스트 뽑아주세요."
"매출 5천만원 이상의 상품 리스트 뽑아주세요."
위와 같이 데이터를 가져올 때, 다음과 같이 순서를 정해 원하는 데이터를 가져오는 방법을 알아본다.
"10번 이상 구매한 VIP고객, 구매 금액 순으로 리스트 뽑아주세요."
"매출 5천만원 이상의 상품, 판매량 순으로 리스트 뽑아주세요."
ORDER BY: 가져온 데이터를 정렬해주는 키워드
ORDER BY [컬럼 이름] 형식으로 사용한다.[컬럼 이름]의 값을 기준으로 모든 row를 정렬한다. ORDER BY [컬럼 이름] = ORDER BY [컬럼 이름] ASCORDER BY [컬럼 이름] DESC[컬럼 이름]을 복수 개 입력하면 된다.ORDER BY [컬럼 1], [컬럼 2][컬럼1]기준으로 정렬->[컬럼1]값이 동일한 로우 간에[컬럼2]기준으로 정렬SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
ORDER BY [컬럼 이름] ASC; //ASC는 생략 가능
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
ORDER BY [컬럼 이름] DESC;



아래와 같이 순서를 정해 원하는 데이터를 가져와보자.
"10번 이상 구매한 VIP고객 중 7번째 고객 뽑아주세요"
"매출 5천만원 이상의 상품 중 판매량 하위 10번째 상품 뽑아주세요"
데이터를 정렬해 순위를 만들어주는 함수
RANK() OVER (ORDER BY [컬럼 이름]) 형식으로 사용한다.// 오름차 순위 만들기
SELECT [컬럼 이름], ..., RANK() OVER (ORDER BY [컬럼 이름])
FROM [테이블 이름]
WHERE 조건식;
// 내림차 순위 만들기
SELECT [컬럼 이름], ..., RANK() OVER (ORDER BY [컬럼 이름] DESC)
FROM [테이블 이름]
WHERE 조건식;



SELECT name, attack,
RANK() OVER (ORDER BY attack DESC) AS rank_rank,
DENSE_RANK() OVER (ORDER BY attack DESC) AS rank_dense_rank,
ROW_NUMBER() OVER (ORDER BY attack DESC) AS rank_row_number
FROM mypokemon;

MySQL 내의 다양한 타입의 데이터는 '함수'를 사용하여 변형할 수 있다.



함수의 예시로는 LENGTH가 있다.

| 함수 | 활용 예시 | 설명 |
|---|---|---|
| LOCATE | LOCATE("A", "ABC") | "ABC"에서 "A"는 몇 번째에 위치해 있는지 검색해 위치 반환 |
| SUBSTRING | SUBSTRING("ABC", 2) | "ABC"에서 2번째 문자부터 반환 |
| RIGHT | RIGHT("ABC", 1) | "ABC"에서 오른쪽에서 1번째 문자까지 반환 |
| LEFT | LEFT("ABC", 1) | "ABC"에서 왼쪽에서 1번째 문자까지 반환 |
| UPPER | UPPER("abc") | "abc"를 대문자로 바꿔 반환 |
| LOWER | LOWER("ABC") | "ABC"를 소문자로 바꿔 반환 |
| LENGTH | LENGTH("ABC") | "ABC"의 글자 수를 반환 |
| CONCAT | CONCAT("ABC", "DEF") | "ABC"문자열과 "CDF"문자열을 합쳐 반환 |
| REPLACE | REPLACE("ABC", "A", "Z") | "ABC"의 "A"를 "Z"로 바꿔 반환 |
| 함수 | 활용 예시 | 설명 |
|---|---|---|
| LOCATE | LOCATE("A", "ABC") | "ABC"에서 "A"는 몇 번째에 위치해 있는지 검색해 위치 반환 |

| 함수 | 활용 예시 | 설명 |
|---|---|---|
| SUBSTRING | SUBSTRING("ABC", 2) | "ABC"에서 2번째 문자부터 반환 |


| 함수 | 활용 예시 | 설명 |
|---|---|---|
| RIGHT | RIGHT("ABC", 1) | "ABC"에서 오른쪽에서 1번째 문자까지 반환 |
| LEFT | LEFT("ABC", 1) | "ABC"에서 왼쪽에서 1번째 문자까지 반환 |

| 함수 | 활용 예시 | 설명 |
|---|---|---|
| UPPER | UPPER("abc") | "abc"를 대문자로 바꿔 반환 |
| LOWER | LOWER("ABC") | "ABC"를 소문자로 바꿔 반환 |

| 함수 | 활용 예시 | 설명 |
|---|---|---|
| LENGTH | LENGTH("ABC") | "ABC"의 글자 수를 반환 |

| 함수 | 활용 예시 | 설명 |
|---|---|---|
| CONCAT | CONCAT("ABC", "DEF") | "ABC"문자열과 "CDF"문자열을 합쳐 반환 |

| 함수 | 활용 예시 | 설명 |
|---|---|---|
| REPLACE | REPLACE("ABC", "A", "Z") | "ABC"의 "A"를 "Z"로 바꿔 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| ABS | ABS(숫자) | 숫자의 절댓값 반환 |
| CEILING | CEILING(숫자) | 숫자를 정수로 올림해서 반환 |
| FLOOR | FLOOR(숫자) | 숫자를 정수로 내림해서 반환 |
| ROUND | ROUND(숫자, 자릿수) | 숫자를 소수점 자랏수까지 반올림해서 반환 |
| TRUNCATE | TRUNCATE(숫자, 자릿수) | 숫자를 소수점 자릿수까지 버림해서 반환 |
| POWER | POWER(숫자A, 숫자B) | 숫자A의 숫자B 제곱 반환 |
| MOD | MOD(숫자A, 숫자B) | 숫자A를 숫자B로 나눈 나머지 반환 |
| 함수 | 활용 | 설명 |
|---|---|---|
| ABS | ABS(숫자) | 숫자의 절댓값 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| CEILING | CEILING(숫자) | 숫자를 정수로 올림해서 반환 |
| FLOOR | FLOOR(숫자) | 숫자를 정수로 내림해서 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| ROUND | ROUND(숫자, 자릿수) | 숫자를 소수점 자랏수까지 반올림해서 반환 |
| TRUNCATE | TRUNCATE(숫자, 자릿수) | 숫자를 소수점 자릿수까지 버림해서 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| POWER | POWER(숫자A, 숫자B) | 숫자A의 숫자B 제곱 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| MOD | MOD(숫자A, 숫자B) | 숫자A를 숫자B로 나눈 나머지 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| NOW | NOW() | 현재 날짜와 시간 반환 |
| CURRENT_DATE | CURRENT_DATE() | 현재 날짜 반환 |
| CURRENT_DATE | CURRENT_DATE() | 현재 시간 반환 |
| YEAR | YEAR(날짜) | 날짜의 연도 반환 |
| MONTH | MONTH(날짜) | 날짜의 원 반환 |
| MONTHNAME | MONTHNAME(날짜) | 날짜의 월을 영어로 반환 |
| DAYNAME | DAYNAME(날짜) | 날짜의 요일을 영어로 반환 |
| DAYOFMONTH | DAYOFMONTH(날짜) | 날짜의 일 반환 |
| DATOFWEEK | DAYOFWEEK(날짜) | 날짜의 요일을 숫자로 반환 |
| WEEK | WEEK(날짜) | 날짜가 해당 연도에 몇 번째 주인지 반환 |
| HOUR | HOUR(시간) | 시간의 시 반환 |
| MINUTE | MINUTE(시간) | 시간의 분 반환 |
| SECOND | SECOND(시간) | 시간의 초 반환 |
| DATE_FORMAT | DATEFORMATE(날짜/시간, 형식) | 날짜/시간의 형식을 형식으로 바꿔 반환 |
| DATEDIFF | DATEDIFF(날짜1, 날짜2) | 날짜1과 날짜2의 차이 반환 (날짜1 - 날짜2) |
| TIMEDIFF | TIMEDIFF(시간1, 시간2) | 시간1과 시간2의 차이 반환 (시간1 - 시간2) |
| 함수 | 활용 | 설명 |
|---|---|---|
| NOW | NOW() | 현재 날짜와 시간 반환 |
| CURRENT_DATE | CURRENT_DATE() | 현재 날짜 반환 |
| CURRENT_DATE | CURRENT_DATE() | 현재 시간 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| YEAR | YEAR(날짜) | 날짜의 연도 반환 |
| MONTH | MONTH(날짜) | 날짜의 원 반환 |
| MONTHNAME | MONTHNAME(날짜) | 날짜의 월을 영어로 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| DAYNAME | DAYNAME(날짜) | 날짜의 요일을 영어로 반환 |
| DAYOFMONTH | DAYOFMONTH(날짜) | 날짜의 일 반환 |
| DATOFWEEK | DAYOFWEEK(날짜) | 날짜의 요일을 숫자로 반환 |
| WEEK | WEEK(날짜) | 날짜가 해당 연도에 몇 번째 주인지 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| HOUR | HOUR(시간) | 시간의 시 반환 |
| MINUTE | MINUTE(시간) | 시간의 분 반환 |
| SECOND | SECOND(시간) | 시간의 초 반환 |

| 함수 | 활용 | 설명 |
|---|---|---|
| DATE_FORMAT | DATEFORMATE(날짜/시간, 형식) | 날짜/시간의 형식을 형식으로 바꿔 반환 |

| 표현 | 설명 |
|---|---|
| %a | 요일을 영문 약어로 표현(Sun, Sat) |
| %b | 월을 영어 약어로 표현(Jan, Dec) |
| %c | 월을 숫자로 표현(0.. 12) |
| %D | 일을 숫자와 영문으로 표현 (0th, 1sr, 2nd, 3rd) |
| %d | 일을 항상 숫자 두 글자로 표현(00, 31) |
| %e | 일을 표현 (0.. 31) |
| %f | 마이크로 초를 표현 (000000..999999) |
| %H | 시를 24시간으로 표현 (00.. 23) |
| %h | 시를 12시간으로 항상 숫자 두 글자로 표현 (01..12) |
| %I | 시를 12시간으로 표현 (1..12) |
| %i | 분을 표현(00..59) |
| %j | 1년 중 몇 번 째 날인지 표현 (001..366) |
| %k | 시를 24시간으로 표현 (0..23) |
| %l | 시를 12시간으로 표현 (1..12) |
| %M | 월을 영문으로 표현 (January, December) |
| %m | 월을 표현 (00.. 12) |
| %p | AM 또는 PM을 표현 |
| %r | 시간을 AM 또는 PM과 함께 표현 (hh:mm:ss AM or PM) |
| %S | 초를 표현 (00..59) |
| %s | 초를 표현 (00..59) |
| %T | 시간을 24시간으로 표현(hh:mm:ss) |
| %U | 1년 중 몇 번째 주인지를 표현(한 주가 일요일 부터 시작. 00..53) |
| %u | 1년 중 몇 번째 주인지를 표현(한 주가 일요일 부터 시작. 00..53) |
| %V | 1년 중 몇 번째 주인지를 표현(한 주가 일요일 부터 시작. 00..53) |
| %v | 1년 중 몇 번째 주인지를 표현(한 주가 일요일 부터 시작. 00..53) |
| %W | 요일을 영문으로 표현 (Sunday..Saturday) |
| %w | 요일을 숫자로 표현 (0=Sunday.. 6=Saturday) |
| %X | 주가 속한 연도를 네 글자로 표현 (한 주가 일요일부터 시작) |
| %x | 주가 속한 연도를 네 글자로 표현 (한 주가 월요일부터 시작) |
| %Y | 연도를 네 글자로 표현 (0000...9999) |
| %y | 연도를 두 글자로 표현 (00, 99) |
| %% | 글자 '%' |
| 함수 | 활용 | 설명 |
|---|---|---|
| DATEDIFF | DATEDIFF(날짜1, 날짜2) | 날짜1과 날짜2의 차이 반환 (날짜1 - 날짜2) |
| TIMEDIFF | TIMEDIFF(시간1, 시간2) | 시간1과 시간2의 차이 반환 (시간1 - 시간2) |
