ORACLE SQL 查询 如何查询 某字段的 一个值 最大的前几个

2025-03-23 17:20:11
推荐回答(2个)
回答1:

代码:

--第一步,建立测试用表

create table sys.test_lcy(

name varchar2(4),

value integer

);

--第二步,检查表是否建立成功

select * from sys.test_lcy;

--第三步,插入试验数据

insert into sys.test_lcy values ('我',21);

insert into sys.test_lcy values ('我',22);

insert into sys.test_lcy values ('我',12);

insert into sys.test_lcy values ('你',33);

insert into sys.test_lcy values ('你',34);

insert into sys.test_lcy values ('你',10);

insert into sys.test_lcy values ('他',20);

insert into sys.test_lcy values ('他',34);

insert into sys.test_lcy values ('他',28);

--第四步,查询语句

SELECT NAME, VALUE

  FROM (SELECT NAME,

               VALUE,

               ROW_NUMBER() OVER(partition by name order by value desc) AS  RN

          FROM sys.test_lcy)

 WHERE RN <= 2;


附注: 1. sysplay的回答和我这个的区别是,如果 ('你',34) 这个值插入三次,那么他的语句出来的结果会出来三条,而我的结果仍然只有两条,如上图所示。 他的结果则变成如下图所示:

        2.两个语句应用在不同场合,他的是用来做排名的,我的仅用来排序的。不存在谁对谁错的问题,请根据实际情况采用。

回答2:

Select
    A,B
From 
    (
        Select
            A,B,rank() Over(PARTITION BY A Order By B Desc) RankId
        From
            Mytable
    ) Mytable2
Where
    RankId<=2