[ 알고리즘 ] LeetCode 2308. Arrange Table by Gender

이주 weekwith.me·2022년 6월 16일
0

알고리즘

목록 보기
9/73
post-thumbnail

블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 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;
profile
Be Happy 😆

0개의 댓글