используя 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) группы по численности населения, графство
Примечание: если два округа имеют одну и ту же населенность, тогда оба округа возвращаются. если граф по какой-то причине перечислен в два раза, они удаляются, хотя группа. Если одно и то же окружение существует в двух состояниях с одинаковой совокупностью, вы, вероятно, не захотите получать желаемые результаты, если вы не добавите состояние к выбору и группе по ...
SQLite не делает имеют CTE. –
@CL. В ответе также нет CTE. Оператор with должен был просто получить данные образца. Вы заметите, что после возврата, в нем указано: Замените CTE своим именем таблицы в обоих случаях в select, и вы должны быть в порядке. – xQbert