假设我们有一个帐户表以及已经给定的值
我想找到帐号数量第二高的帐户类型。在这种情况下,结果应为'FD'
。如果它们是第二高计数的争用,我需要结果中的所有类型。
我不知道该怎么做。我找到了很多帖子,可以在表格中找到第二个最高值,比如薪水。但不是第二高COUNT
。
答案 0 :(得分:0)
这可以使用cte来完成。获取每种类型的计数作为第一步。然后使用dense_rank
(在绑定的情况下获取具有相同计数的多行)以根据计数按类型获取行的排名。最后,选择排名第二的行。
with counts as (
select type, count(*) cnt
from yourtable
group by type)
, ranks as (
select type, dense_rank() over(order by cnt desc) rnk
from counts)
select type
from ranks
where rnk = 2;
答案 1 :(得分:0)
一种选择是使用row_number()
(或dense_rank()
,具体取决于"第二个"意味着何时存在关系):
select a.*
from (select a.type, count(*) as cnt,
row_number() over (order by count(*) desc) as seqnum
from accounta a
group by a.type
) a
where seqnum = 2;
在Oracle 12c +中,您可以使用offset
/ fetch
:
select a.type, count(*) as cnt
from accounta a
group by a.type
order by count(*) desc
offset 1
fetch first 1 row only