Как сделать необработанный запрос SQL, который выбирает город с наибольшим населением, связанным с кодом города (есть дубликаты кодов городов) - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть таблица со следующими столбцами: areaCode zipcode city state population

Есть несколько строк с одинаковыми кодами городов, которые связаны с разными городами / Zip коды. Мне нужно выбрать город с наибольшим населением, соответствующий коду города.

EX:

код_области / почтовый индекс / город / штат / население

858 94111   San Francisco   CA  3905
858 94121   San Francisco   CA  34786
914 10010   New York    NY  22785
914 10012   New York    NY  17738  

I хотите иметь возможность выбрать только город Сан-Франциско (с кодом города 858), в котором проживает 34786 человек, и строку Нью-Йорк (с кодом города 914), в которой проживает 22785 человек, поскольку они имеют наибольшее население. После выбора этих мне нужно создать новую таблицу и поместить их в новую таблицу.

Ответы [ 3 ]

1 голос
/ 21 февраля 2020

Попробуйте:

Create table MaxPopulation as (select area_codes,city,max(population) from table group by area_codes,city);
1 голос
/ 21 февраля 2020
INSERT INTO cte_new
SELECT 
   area_codes,
   zip,
   city,
   state,
   MAX(population) population
FROM cte
GROUP BY
   area_codes,
   zip,
   city,
   state

Как правило, я бы предпочел функцию группировки, чем оконную функцию (разделение), поскольку она предлагает гораздо лучшую производительность. Я пропустил объявление таблицы, которое вам потребуется до этого кода

1 голос
/ 21 февраля 2020

Общее решение использует ROW_NUMBER:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY area_codes ORDER BY population DESC) rn
    FROM yourTable
)

SELECT area_codes, zip, city, state, population
FROM cte
WHERE rn = 1;
...