SQL - найти минимальное значение определенной группы c и предоставить расширенную информацию о нем - PullRequest
0 голосов
/ 15 апреля 2020

Я хотел бы представиться как человек, который только недавно начал немного возиться с SQL. На протяжении всего процесса обучения я сталкивался с очень специфической c проблемой, и поэтому мой вопрос тоже очень специфичен c. Учитывая следующую таблицу:

enter image description here

Как должен выглядеть мой список команд, чтобы получить следующую таблицу:

enter image description here

Другими словами, что я должен написать, чтобы в основном показать минимальную зарплату и идентификатор ее владельца для каждой страны. Я пытался использовать GROUP BY, но все, что я мог получить, это минимальная зарплата в каждой стране, тогда как моя цель состояла в том, чтобы показать идентификатор, который также относится к минимальной зарплате. поддержка.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вы можете сделать по

select
    id,
    country,
    salary
from
(
  select
    id,
    country,
    salary,
    row_number() over (partition by country order by salary) as rnk
  from table
)val
where rnk = 1
0 голосов
/ 15 апреля 2020

Это типичная проблема с наибольшим числом групп.

Одним из решений для нескольких баз данных является фильтрация с помощью подзапроса:

select t.*
from mytable t
where t.salary = (select min(t1.salary) from mytable t1 where t1.country = t.country)

Для повышения производительности с помощью этого запроса вы хотите индексировать по (country, salary).

Вы также можете использовать оконные функции, если ваша база данных поддерживает это:

select id, country, salary
from (
    select t.*, rank() over(partition by country order by salary) rn
    from mytable t
) t
where rn = 1
...