Students Report By Geography

hard database sql

Problem

Student(name, continent). Pivot into three columns America / Asia / Europe, each sorted lexicographically and padded with NULL.

Inputs=[('Jane','America'),('Pascal','Europe'),('Xi','Asia'),('Jack','America')]
Output[('Jack','Xi','Pascal'),('Jane',null,null)]
Each continent has its names sorted; shorter continents pad with NULL.

SELECT MAX(CASE WHEN continent='America' THEN name END) AS America,
       MAX(CASE WHEN continent='Asia' THEN name END) AS Asia,
       MAX(CASE WHEN continent='Europe' THEN name END) AS Europe
FROM (SELECT name, continent, ROW_NUMBER() OVER (PARTITION BY continent ORDER BY name) rn FROM Student) t
GROUP BY rn;
Time: O(n) Space: O(n)