Redshift
Snippets
WITH test_table AS (
SELECT 'Shizuoka' AS pref, 'Shizuoka' AS city UNION ALL
SELECT 'Shizuoka' AS pref, 'Shizuoka' AS city UNION ALL
SELECT 'Shizuoka' AS pref, 'Hamamatsu' AS city UNION ALL
SELECT 'Shizuoka' AS pref, 'Hamamatsu' AS city UNION ALL
SELECT 'Shizuoka' AS pref, 'Hamamatsu' AS city UNION ALL
SELECT 'Aichi' AS pref, 'Nagoya' AS city UNION ALL
SELECT 'Aichi' AS pref, 'Nagoya' AS city UNION ALL
SELECT 'Aichi' AS pref, 'Nagoya' AS city UNION ALL
SELECT 'Aichi' AS pref, 'Nagoya' AS city UNION ALL
SELECT 'Aichi' AS pref, 'Nagoya' AS city UNION ALL
SELECT 'Aichi' AS pref, 'Chita' AS city
),
test_table_1 AS (
SELECT
COUNT(*) AS n, pref,
city || ' (' || COUNT(*)::VARCHAR || ')' AS city,
RANK() OVER (PARTITION BY pref ORDER BY COUNT(city) DESC) AS rank
FROM test_table
GROUP BY pref, city
)
SELECT
SUM(n) AS n, pref,
MAX(CASE WHEN rank = 1 THEN city ELSE NULL END) AS city_1,
MAX(CASE WHEN rank = 2 THEN city ELSE NULL END) AS city_2
FROM test_table_1 GROUP BY pref ORDER BY n DESC;
n pref city_1 city_2
6 Aichi Nagoya (5) Chita (1)
5 Shizuoka Hamamatsu (3) Shizuoka (2)