• + 0 comments

    My solutions (MySQL). hope it helps!

    First approach: using CTE

    WITH occupation_rank AS (
            SELECT
                    name,
                    occupation,
                    ROW_NUMBER() OVER(PARTITION BY occupation ORDER BY name ASC) as rn
            FROM occupations
    )
    SELECT
            MAX(CASE WHEN occupation = 'Doctor' THEN name END) AS doctor_names,
            MAX(CASE WHEN occupation = 'Professor' THEN name END) AS professor_names,
            MAX(CASE WHEN occupation = 'Singer' THEN name END) AS singer_names,
            MAX(CASE WHEN occupation = 'Actor' THEN name END) AS actor_names 
    FROM occupation_rank
    GROUP BY rn
    ORDER BY rn;
    

    Second approach: using subquery

    SELECT
            MAX(CASE WHEN occupation = 'Doctor' THEN name END) AS doctor_names,
            MAX(CASE WHEN occupation = 'Professor' THEN name END) AS professor_names,
            MAX(CASE WHEN occupation = 'Singer' THEN name END) AS singer_names,
            MAX(CASE WHEN occupation = 'Actor' THEN name END) AS actor_names
    FROM (
            SELECT
                    name,
                    occupation,
                    ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) as rn
            FROM OCCUPATIONS
    ) AS sorted
    GROUP BY rn;