2016-07-12 2 views
1

Это моя база данных:Лучшие стоимость работников формы заработной платы в каждой стране SQL

  • Таблица Страна: Идентификатор целое (рк), имя VARCHAR,
  • Таблица служащий: Идентификатор целое (рк), CountryId целое (fk), имя varchar, целочисленная зарплата.

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

Это мой SQL запрос:

Select * 
from Employe 
order by Employe.salary 
desc LIMIT 1; 

ответ

1

Попробуйте этот запрос

SELECT Employe.countryid , Max(Employe.salary) from Employe GROUP BY Employe.countryid 
+0

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

+2

благодарит за работу. но что, если я хотел бы отобрать пятерку сотрудников из каждой страны? Я не могу использовать max(). – lassa

1

Вы можете использовать функцию rank окна, чтобы получить "первый" сотрудника [с] (зарплаты-накрест) за страна:

SELECT id, c.name, e.name, salary 
FROM (SELECT id, countryid, name, salary, 
       RANK() OVER (PARTITION BY countryid ORDER BY salary DESC) rk 
     FROM employee) e 
JOIN country c ON c.id = e.countryid 
WHERE rk = 1 
2

В Postgres можно использовать удобный distinct on:

select distinct on (c.name) c.name country, e.name employe, salary 
from employe e 
join countries c on c.id = e.country_id 
order by c.name, salary desc 
+0

И эта версия использует индекс разумно. –

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