블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 https://weekwith.me 에 작성 예정이니 다른 글이 궁금하시다면 해당 링크를 통해 방문해주세요.본 글은 [ LeetCode ] 2308. Arrange Table by Gender를 풀고 작성한 글입니다.
Table: Genders
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| user_id | int |
| gender | varchar |
+-------------+---------+
user_id is the primary key for this table.
gender is ENUM of type 'female', 'male', or 'other'.
Each row in this table contains the ID of a user and their gender.
The table has an equal number of 'female', 'male', and 'other'.
Write an SQL query to rearrange the Genders
table such that the rows alternate between 'female'
, 'other'
, and 'male'
in order. The table should be rearranged such that the IDs of each gender are sorted in ascending order.
Return the result table in the mentioned order.
The query result format is shown in the following example.
처음에 WITH RECURSIVE
구를 활용해서 문제를 풀어야 하는 건지 고민했었는데 생각해보니 ORDER BY
순서만 잘 설정하면 되는 문제였다.
추가로 gender
필드에 대한 임의의 정렬 순서는 CASE
구를 활용하여 해결할 수 있다.
gender
필드 별로 user_id
필드의 값을 오름차순 정렬하고 정렬된 테이블을 다시 gender
필드 기준으로 정렬하면 된다.
접근법을 토대로 푼 쿼리 결과는 아래와 같다.
SELECT
user_id,
gender
FROM (
SELECT
user_id,
gender,
ROW_NUMBER() OVER(PARTITION BY gender ORDER BY user_id ASC) AS id_order,
CASE gender
WHEN 'female' THEN 1
WHEN 'other' THEN 2
ELSE 3
END AS gender_order
FROM Genders
) AS OrderedGenders
ORDER BY id_order ASC, gender_order ASC;