查询供应商中能够供应的产品样数第二多的供应商

查询供应商中能够供应的产品样数第二多的供应商,如果有很多一样的,那么全部列出来

这是我当时写的错误答案

select top 1

       a.公司名称,

       count(*) 数量

from 供应商 a ,产品 b

where a.供应商ID=b.供应商ID

group by a.公司名称

order by count(*) desc

yzm189576 发布于 2021-4-14 11:02 (编辑于 2021-4-14 11:12)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
wangchunguangLv5见习互助
发布于2021-4-14 11:10

利用 dense_rank()开窗函数 : 重复连续 1.1.2.2.3.4.5.5.6

Select Fname, Fsalary, row_number(partition by 供应商 order by 数量 desc) as 排名

FROM T_Person where row_number(partition by 供应商 order by 数量 desc)=2 ;

先按照数量大小给供应商排序 ,然后 筛选 排序为2 的

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-4-14 11:13

https://blog.csdn.net/chenghaibing2008/article/details/8616926

最佳回答
0
ok航Lv2见习互助
发布于2021-4-14 16:48(编辑于 2021-4-14 16:51)

很简单,把最多的供应商排除掉。

with a  as (

select a.公司名称,count(*) 数量

from 供应商 a , 产品 b 

where a.供应商ID=b.供应商ID

group by a.公司名称)

select b.公司名称

from (

select a.公司名称 

from a 

where 数量 != (select max(数量) from a)

order by 数量 desc ) b

where 数量 =max(数量)

核心思路 ,先求供应量最大的公司,把这家公司排除掉,再求最大的公司。

最佳回答
0
RFLv5初级互助
发布于2021-4-14 17:03

你看下,使用row_number() over()函数来实现吧

可以了解下rank() 、dens_rank()、row_number()这三个,根据自己的需求场景选择合适的

with aa as(

select a.公司名称

     , count(*) 数量

from 供应商 a ,产品 b

where a.供应商ID=b.供应商ID

group by a.公司名称

)

, bb as(

select 公司名称

     , 数量

     , row_number() over(partition by a.公司名称 order by 数量 desc) as tn

from aa

)

select *

from bb

where tn = 2

  • 4关注人数
  • 544浏览人数
  • 最后回答于:2021-4-14 17:03
    请选择关闭问题的原因
    确定 取消
    返回顶部