We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
- Prepare
- SQL
- Advanced Select
- Occupations
- Discussions
Occupations
Occupations
Sort by
recency
|
2190 Discussions
|
Please Login in order to post a comment
why we need row number herencan anybody explain
SELECT MIN(CASE WHEN Occupation = 'Doctor' THEN Name END) AS Doctor, MIN(CASE WHEN Occupation = 'Professor' THEN Name END) AS Professor, MIN(CASE WHEN Occupation = 'Singer' THEN Name END) AS Singer, MIN(CASE WHEN Occupation = 'Actor' THEN Name END) AS Actor FROM ( Select Name, occupation, ROW_NUMBER() OVER(PARTITION BY Occupation ORDER BY Name) as RowNum FROM OCCUPATIONS ) AS Temp GROUP BY RowNum ORDER BY RowNum;
MySQL solution
WITH ordered AS ( SELECT Name, Occupation, ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) AS rn FROM OCCUPATIONS ) SELECT MAX(CASE WHEN Occupation = 'Doctor' THEN Name END) AS Doctor, MAX(CASE WHEN Occupation = 'Professor' THEN Name END) AS Professor, MAX(CASE WHEN Occupation = 'Singer' THEN Name END) AS Singer, MAX(CASE WHEN Occupation = 'Actor' THEN Name END) AS Actor FROM ordered GROUP BY rn ORDER BY rn;
SELECT COALESCE(MAX(CASE WHEN occupation = 'Doctor' THEN name END), 'NULL'), -- conditional aggregation COALESCE(MAX(CASE WHEN occupation = 'Professor' THEN name END), 'NULL'), -- inside the max function the statement only passes the name if it matches with the occupation otherwise it passes null COALESCE(MAX(CASE WHEN occupation = 'Singer' THEN name END), 'NULL'), COALESCE(MAX(CASE WHEN occupation = 'Actor' THEN name END), 'NULL') FROM ( SELECT name, occupation, ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) AS rn -- assigns the sequential row number to each row FROM OCCUPATIONS ) AS t GROUP BY rn -- groups the result by the row number ORDER BY rn; -- order the final result based on the row number