我有SQL查询的问题。我在这样的表中的数据:MySQL获取最大值(值)和第二高值
Name Value Other
Jim 301 v1
Jim 302 v1
Jim 303 v1
Mat 30 else
Mat 301 else
Mat 3091 else
和IM试图让名称和max(值)列名和同名第二高值,这样做,也是对单一选择的所有名称。任何人都知道如何做到这一点? 输出示例:Mat,3091,301;吉姆,303302
我有SQL查询的问题。我在这样的表中的数据:MySQL获取最大值(值)和第二高值
Name Value Other
Jim 301 v1
Jim 302 v1
Jim 303 v1
Mat 30 else
Mat 301 else
Mat 3091 else
和IM试图让名称和max(值)列名和同名第二高值,这样做,也是对单一选择的所有名称。任何人都知道如何做到这一点? 输出示例:Mat,3091,301;吉姆,303302
为每个名字MySQL顶部的两个值中选择行:
select t.*
from myTable t
where t.value >= (
select t1.value
from myTable t1
where t1.name = t.name
order by t1.value desc
limit 1 offset 1 -- second highest value
)
谢谢,这就是我要找的 – djdecks93
标准SQL的方式将使用rank()
:
select t.*
from (select t.*,
rank() over (partition by name order by value desc) as seqnum
from t
) t
where seqnum <= 2;
注:如果有联系,那么这对于每名返回超过两行。
标签与正在使用的数据库你的问题。 –
请在问题 –
@NikhilVC完成后添加预期结果,所以你有什么想法? – djdecks93