2013-04-15 3 views
-1

У меня есть следующая таблица, я хотел бы написать запрос для:SQL запрос с участием MAX

имени таблицы: Stats_State_County

Column name Type  Constraint 
----------------------------------- 
Population  number 
CountyName  string 
State   number Primary key 

Я хотел бы, чтобы найти округ с максимальным населением для каждое государство. Я хотел бы только распечатать имя графства и максимальное население для этого округа. В настоящее время у меня есть что-то, что возвращает состояние и их максимальное количество населения, но мне нужно вернуть имена графств вместо состояний.

Благодаря

ответ

-1

используя coorleated подзапрос, чтобы определить максимальное население для округа в том же состоянии.

With CTE as 
(Select 'A' as state,1000 as population, 'A1' as county FROM DUAL UNION ALL 
Select 'A',1000, 'A2' FROM DUAL UNION ALL 
Select 'A',1001, 'A3' FROM DUAL UNION ALL 
Select 'A',1001, 'A3' FROM DUAL UNION ALL 
Select 'A',1001, 'A4' FROM DUAL UNION ALL 
Select 'B',2000, 'B1' FROM DUAL UNION ALL 
Select 'B',2000, 'B3' FROM DUAL UNION ALL 
Select 'B',2001, 'B2' FROM DUAL UNION ALL 
Select 'B',2002, 'B4' FROM DUAL) 
Select population, county from CTE A1 
    where a1.population >= (Select max(A2.population) from CTE A2 Where A2.State = A1.State) Group by population, county 

Возвращает:

Population County 
1001  A3 
1001  A4 
2002  B4 

Replace CTE с именем таблицы в обоих случаях это выбор, и вы должны быть в порядке.

Выберите население округа от КТР A1 где a1.population> = (выберите максимальное (A2.population) от КТР A2 Где A2.State = A1.State) группы по численности населения, графство

Примечание: если два округа имеют одну и ту же населенность, тогда оба округа возвращаются. если граф по какой-то причине перечислен в два раза, они удаляются, хотя группа. Если одно и то же окружение существует в двух состояниях с одинаковой совокупностью, вы, вероятно, не захотите получать желаемые результаты, если вы не добавите состояние к выбору и группе по ...

+0

SQLite не делает имеют CTE. –

+0

@CL. В ответе также нет CTE. Оператор with должен был просто получить данные образца. Вы заметите, что после возврата, в нем указано: Замените CTE своим именем таблицы в обоих случаях в select, и вы должны быть в порядке. – xQbert

0

С SQLite 3.7.11 или новее, вы можете использовать это:

SELECT CountyName, 
     MAX(Population) 
FROM Stats_State_County 
GROUP BY State 

на ранних SQLite версии, не-агрегируются поле как CountName не гарантируется исходить от той же записи, которые соответствовали MAX, так что вы должны искать свое название от населения отдельный этап:

SELECT (SELECT CountyName 
     FROM Stats_State_County 
     WHERE State = T1.State 
      AND Population = T1.MaxPop), 
     MaxPop 
FROM (SELECT State, 
      MAX(Population) AS MaxPop 
     FROM Stats_State_County 
     GROUP BY State 
    ) AS T1 
Смежные вопросы