Запрос SQL для получения наиболее заполненного почтового индекса для ГОРОДА в ГОСУДАРСТВЕ из моей существующей таблицы с данными - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть таблица «Люди» со следующими столбцами: идентификатор, имя, имя, адрес, город, штат, почтовый индекс в Oracle 9.x

Я хочу получить самый населенный почтовый индекс на город в штате

Я написал этот запрос:

Select City, State, Zip, count(*)
From People
Group By City, State
Order By count(*)

Но он дает мне НЕСКОЛЬКО строк для города для штата, Как (составлено): -

City  --  State -- Zip   -- Count(*)
City0 --  ST0   -- 32111 -- 50
City1 --  ST1   -- 11223 -- 100
City1 --  ST1   -- 11225 -- 90
City1 --  ST1   -- 11226 -- 50
City2 --  ST1   -- 11255 -- 70
City3 --  ST2   -- 55443 -- 60

Iпопробовал предложение HAVING, например: Имея Count () = max (Count ()), НО получило сообщение об ошибке: NESTED имеет слишком глубокое предложение или что-то подобное (Oracle 9.x)

Я хочу толькоВерхняя строка: - City1 - ST1 - 11223 - 100 для всех строк City1 - ST1, Другие строки, где для каждого города имеется только одна строка для каждого штата, которые останутся такими же.WANTED OUTPUT: -

City  --  State -- Zip   -- Count(*)
City0 --  ST0   -- 32111 -- 50
**City1 --  ST1   -- 11223 -- 100**
City2 --  ST1   -- 11255 -- 70
City3 --  ST2   -- 55443 -- 60

Как мне этого добиться?Спасибо за просмотр.

==========

ОТВЕТ НАЙТИ ОТ ОТВЕТА ДЖИМА ХАДСОНА Путем небольшого изменения предоставленного запроса я понял его правильно.ЗАКЛЮЧИТЕЛЬНЫЙ КОД: -

select city, state, zip, counter from  (
select city, state, zip, count(*) as counter from people group by city, state, zip
)  
where counter = (
    select max(count2) from (
        select city as city1, state as state1, zip as zip1, count(*) as count2 from people group by city, state, zip   )
    where city=city1 and state=state1
);

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011
select * from (
  select city, state, zip,
    rank() over (partition by city, state order by cnt desc) rank
  from (
    Select City, State, Zip, count(*) cnt
    From People
    Group By City, State, Zip
  )
)
where rank = 1
0 голосов
/ 18 февраля 2011

Думайте о своем первом запросе как о представлении.Это дает вам счет для города, штата, почтовый индекс.Тогда используйте это как отправную точку.Тогда было бы легко получить население по самому большому почтовому индексу.

Например,

select city, state, max(counter) from
(select city, state, zip, count(*) as counter from people group by city, state, zip)
group by city, state;

Конечно, это не совсем то, что вы хотите, так как вы хотите знать, какой почтовый индекс это,Таким образом, старый способ будет выглядеть примерно так:

select city, state, zip, counter from
(select city, state, zip, count(*) as counter from people group by city, state, zip)
where counter = (select max(count2) from (select city, state, zip, count(*) as count2 from people group by city, state, zip));

Есть и другие способы сделать второй шаг, используя аналитические функции.Я позволю кому-то еще поработать над этим.Но критическим шагом является создание встроенного представления и использование его в качестве основы для вашего дальнейшего анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...