选择前10行,然后确定要包含哪些行

son*_*onu 3 sql oracle greatest-n-per-group

我在表中有2列.第1列代表不同公司的名称,第2列显示产品数量.

COL 1         COL 2
CompA         2323
CompB         2320
CompC         1999
CompD         1598
CompE         1400...so on
Run Code Online (Sandbox Code Playgroud)

我想要做的是显示前10行显示前10个公司名称及其在desc顺序中的计数.然后我想比较第10个公司数和第11个公司数.如果匹配,则显示第11个公司名称及其计数.如果第10个公司计数与第11个公司计数不匹配,则仅显示前10个记录.

我只读访问权限,因此无法在表中更新或插入新记录.

如何才能做到这一点?

APC*_*APC 7

如果您想要做的是显示前十个计数,包括关系.这是用简单的解析函数来解决,如RANK()DENSE_RANK()...

SQL> select * from
  2      ( select
  3          ename
  4             , sal
  5             , rank() over (order by sal desc) sal_rank
  6      from emp
  7      )
  8  where sal_rank <= 10
  9  /

ENAME             SAL   SAL_RANK
---------- ---------- ----------
QUASSNOI         6500          1
SCHNEIDER        5000          2
FEUERSTEIN       4500          3
VERREYNNE        4000          4
LIRA             3750          5
PODER            3750          5
KESTELYN         3500          7
TRICHLER         3500          7
GASPAROTTO       3000          9
ROBERTSON        2990         10
RIGBY            2990         10

11 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)

请注意,如果RIGBY与GASPAROTTO具有相同的工资,那么他们的SAL_RANK将为9,ROBERTSON将为11,结果集将包含10行.

DENSE_RANK()它的不同之处RANK()在于它总是返回前十名的粉丝,而不是跳过领带......

SQL> select * from
  2      ( select
  3          ename
  4             , sal
  5             , dense_rank() over (order by sal desc) sal_rank
  6      from emp
  7      )
  8  where sal_rank <= 10
  9  /

ENAME             SAL   SAL_RANK
---------- ---------- ----------
                               1
SCHNEIDER        5000          2
FEUERSTEIN       4500          3
VERREYNNE        4000          4
LIRA             3750          5
PODER            3750          5
KESTELYN         3500          6
TRICHLER         3500          6
GASPAROTTO       3000          7
ROBERTSON        2990          8
RIGBY            2990          8
SPENCER          2850          9
BOEHMER          2450         10

13 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)