我有這個資料集:
shopID supplier supply_count
1 a 12
2 b 12
2 f 12
2 e 10
3 b 5
3 a 2
4 f 15
4 c 11
我使用這個查詢來獲得每個組的第二個最高值:
select s1.shopId, max(s1.supply_count)
from supply s1
where supply_count NOT IN (
select max(supply_count)
from supply s2
where s1.shopId = s2.shopId
)
group by s1.shopId
我得到的結果是:
shopID supply_count
2 10
3 2
4 11
所需的輸出是:(如果沒有第二高,我想呈現最高的)
shopID supply_count
1 12
2 10
3 2
4 11
基于這個問題: Retrieve 2nd high count by each group
uj5u.com熱心網友回復:
通過計算每個 ShopId 的行數,您可以獲得所需的輸出,以包含每個 shopId 只有一行的值。
根據一些更多樣化的資料和評論,我相信以下內容應該會給出預期的結果:
with c as (
select *,
case when dense_rank() over(partition by shopid order by supply_count desc)=2
or Min(supply_count) over(partition by shopid)
=Max(supply_count) over(partition by shopid)
then 1 else 0 end as valid
from t
)
select distinct shopId, supply_count
from c
where valid=1
示例DBFiddle 包含一些更多樣化的資料
uj5u.com熱心網友回復:
select
shopID,
supply_count
from
(select shopID,
supply_count, dense_rank() over(partition by shopID order by supply_count desc) as rn
from supply) a
where rnk=2
group by
shopID,
supply_count
union
select shopID,
supply_count
from supply
where shopID in (select shopID from supply group by shopID having count(distinct supply_count) =1) a
group shopID,
supply_count;
我相信這應該有效。我在這里嘗試的是通過為每個組分配一個等級并與只有一個記錄的 shopID 進行聯合來確定第二高的供應數量。
如果您不明白 a 的dense_rank()作用,請閱讀:https : //towardsdatascience.com/how-to-use-sql-rank-and-dense-rank-functions-7c3ebf84b4e8
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323255.html
標籤:sql sql-server 查询语句
