0

我想介绍一下自己是最近刚刚开始使用 SQL 的人。在整个学习过程中,我遇到了一个非常具体的问题,因此,我的问题也非常具体。给定下表:

在此处输入图像描述

我的命令列表应该如何查看才能获得下表:

在此处输入图像描述

换句话说,我应该写什么来基本上显示每个国家的最低工资和它的所有者的id。我曾尝试使用 GROUP BY,但我能得到的只是每个国家/地区的最低工资,而我的目标是显示也属于最低工资的 id。

希望我的问题清楚,我感谢大家的支持。

4

2 回答 2

0

这是一个典型的每组最大 n 问题。

一种跨数据库解决方案是使用子查询进行过滤:

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
于 2020-04-14T23:13:24.900 回答
0

你可以这样做

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
于 2020-04-14T23:15:05.987 回答