gpt4 book ai didi

sql - 选择前 10 行,然后决定之后要包含哪些行

转载 作者:行者123 更新时间:2023-12-01 10:10:07 25 4
gpt4 key购买 nike

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

COL 1         COL 2
CompA 2323
CompB 2320
CompC 1999
CompD 1598
CompE 1400...so on

我想要做的是显示前 10 行,显示前 10 家公司名称及其按降序排列的计数。然后我想比较第 10 家公司和第 11 家公司的数量。如果匹配,则显示第 11 个公司名称及其数量。如果第 10 个公司计数与第 11 个公司计数不匹配,则只显示前 10 个记录。

我有只读访问权限,所以我不能在表中更新或插入新记录。

如何做到这一点?

最佳答案

如果您想做的是显示前 10 个计数,包括平局。这很容易用分析函数解决,例如 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>

请注意,如果 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>

关于sql - 选择前 10 行,然后决定之后要包含哪些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com