我想介绍一下自己是最近刚刚开始使用 SQL 的人。在整个学习过程中,我遇到了一个非常具体的问题,因此,我的问题也非常具体。给定下表:
我的命令列表应该如何查看才能获得下表:
换句话说,我应该写什么来基本上显示每个国家的最低工资和它的所有者的id。我曾尝试使用 GROUP BY,但我能得到的只是每个国家/地区的最低工资,而我的目标是显示也属于最低工资的 id。
希望我的问题清楚,我感谢大家的支持。
我想介绍一下自己是最近刚刚开始使用 SQL 的人。在整个学习过程中,我遇到了一个非常具体的问题,因此,我的问题也非常具体。给定下表:
我的命令列表应该如何查看才能获得下表:
换句话说,我应该写什么来基本上显示每个国家的最低工资和它的所有者的id。我曾尝试使用 GROUP BY,但我能得到的只是每个国家/地区的最低工资,而我的目标是显示也属于最低工资的 id。
希望我的问题清楚,我感谢大家的支持。
这是一个典型的每组最大 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
你可以这样做
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