查询供应商中能够供应的产品样数第二多的供应商,如果有很多一样的,那么全部列出来
这是我当时写的错误答案
select top 1
a.公司名称,
count(*) 数量
from 供应商 a ,产品 b
where a.供应商ID=b.供应商ID
group by a.公司名称
order by count(*) desc
利用 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 的
https://blog.csdn.net/chenghaibing2008/article/details/8616926
很简单,把最多的供应商排除掉。
with a as (
select a.公司名称,count(*) 数量
from 供应商 a , 产品 b
group by a.公司名称)
select b.公司名称
from (
select a.公司名称
from a
where 数量 != (select max(数量) from a)
order by 数量 desc ) b
where 数量 =max(数量)
核心思路 ,先求供应量最大的公司,把这家公司排除掉,再求最大的公司。
你看下,使用row_number() over()函数来实现吧
可以了解下rank() 、dens_rank()、row_number()这三个,根据自己的需求场景选择合适的
with aa as(
, count(*) 数量
)
, bb as(
select 公司名称
, 数量
, row_number() over(partition by a.公司名称 order by 数量 desc) as tn
from aa
select *
from bb
where tn = 2