2014-11-21 4 views
1

Определите имя, партии и годы, которые обслуживают президентов с большинством лет пребывания на их вечеринке . Я не могу использовать ключевое слово join.Поиск максимального значения группы строк POSTGRESQL

Таблица президент:

Name        | Party     | years_served| 
-------------+-------------+-------------+ 
Roosevelt  | Democratic | 12 
Madison   | Demo-rep   | 8 
Monroe    | Demo-rep   | 8 
Adams     | Demo-rep   | 4 

Так что результат будет Рузвельт, Мадисон и монро показать и Адамс не потому, что он не служил 8 лет, которая является максимальной для демонстрационных повторений.

ответ

0

Попробуйте это:

SELECT Name 
FROM President pr 
    INNER JOIN (SELECT Party, MAX(years_served) as YS FROM president GROUP BY Party) as MaxYS on MaxYS.Party=Pr.Party 
WHERE pr.years_served>=MaxYS.YS 

Надежда это то, что вы ищете.

+0

Я не могу использовать ключевое слово здесь присоединиться – wickys

+0

@wickys: почему вы думаете, что вы не можете использовать присоединиться там? –

+0

Могу ли я спросить, почему вы не можете? – ericpap

1

Вы можете использовать функцию dense_rank() окна:

with cte as (
    select 
     *, dense_rank() over(partition by Party order by years_served desc) as rnk 
    from Table1 
) 
select 
    Name, Party, years_served 
from cte 
where rnk = 1 

sql fiddle demo

Смежные вопросы