Data Analysis 데이터 분석/SQL 통한 Database 관리

order by (case when id = 999 then 0 else id end)

Queen Julia 2024. 8. 29. 18:01

`ORDER BY (CASE WHEN id = 999 THEN 0 ELSE id END)` 구문은 `id` 값이 `999`인 행을 먼저 정렬하고, 나머지 `id` 값들은 오름차순으로 정렬하는 방법입니다. 이 구문은 SQL의 `CASE` 문을 사용하여 동적으로 정렬 기준을 변경하는 것을 의미합니다.

### 구문 설명

- `CASE WHEN id = 999 THEN 0 ELSE id END`:
  - `id`가 `999`인 경우, 해당 값은 `0`으로 변환됩니다.
  - `id`가 `999`가 아닌 경우에는 원래 `id` 값을 유지합니다.

- `ORDER BY`:
  - 기본적으로 오름차순 정렬이기 때문에 `0`이 가장 앞에 오게 됩니다.
  - 따라서 `id`가 `999`인 행이 가장 먼저 출력되고, 나머지 `id` 값들은 오름차순으로 정렬됩니다.

### 예제

다음과 같은 `users` 테이블이 있다고 가정해 봅시다:

| id  | name   |
|-----|--------|
| 1   | Alice  |
| 999 | Bob    |
| 3   | Carol  |
| 2   | Dave   |
| 100 | Eve    |

이제, 위 구문을 사용하여 `id = 999`인 행을 가장 먼저 출력하고, 나머지 `id`는 오름차순으로 정렬하는 쿼리를 작성해보겠습니다:

```sql
SELECT id, name
FROM users
ORDER BY (CASE WHEN id = 999 THEN 0 ELSE id END);
```

### 결과

이 쿼리의 결과는 다음과 같이 정렬됩니다:

| id  | name   |
|-----|--------|
| 999 | Bob    |
| 1   | Alice  |
| 2   | Dave   |
| 3   | Carol  |
| 100 | Eve    |

### 정리

- `ORDER BY (CASE WHEN id = 999 THEN 0 ELSE id END)`는 특정 조건(`id = 999`)을 만족하는 행을 먼저 출력하고, 그 이후 나머지 값들을 정렬하는 유용한 방법입니다.
- 이 방식은 특정 행을 목록의 맨 앞이나 뒤로 이동시키고 싶을 때 자주 사용됩니다.

이 방법을 활용하면, 유연하게 정렬 기준을 조정할 수 있습니다.