我有一張交易表,其中包含可以發送交易的發送方和接收方的概念

現在我想獲得一個結果集,該結果集應包含每個 (1) 接收者的唯一發送者數量范圍
一 (1) 個接收者從 1 人(發送者)接收
一 (1) 個接收方接收 2-5 個人(發送方)
一 (1) 個接收者接收 6-10 人(發送者)
一 (1) 個接收者接收 11-20 人(發送者)
一 (1) 個接收者接收超過 20 人(發送者)

我嘗試過但無法獲得所需的結果集。任何人都可以幫助我。
問候
uj5u.com熱心網友回復:
作為評論,這將是一團糟。您并沒有真正提供示例資料和所需的輸出(我不接受圖片作為示例)。無論如何,您所描述的是一個簡單的count():
select receiver, count(distinct sender) senderCount
from myTable
group by receiver
order by count(distinct sender);
會做的。將結果放入像 1、2-5、... 這樣的桶可以用不同的方式完成。IE:
with counts(receiver, senderCount) as
(
select receiver, count(distinct sender)
from myTable
group by receiver
)
select receiver,
case
when senderCount = 1 then '1'
when senderCount > 1 and senderCount <= 5 then '2-5'
when senderCount > 5 and senderCount <= 10 then '6-10'
when senderCount > 10 and senderCount <= 20 then '11-20'
when senderCount > 20 then 'Over 20'
end as individualGroup
from counts;
uj5u.com熱心網友回復:
創建一個存盤范圍的(虛擬)表,然后將其與聚合資料連接:
SELECT ranges.*, COUNT(SenderCount) AS ReceiversInRange --, other aggregates
FROM (VALUES
(1, 1, 1, 'Low risk'),
(2, 2, 5, 'Low risk'),
(3, 6, 10, 'Medium risk'),
(4, 11, 20, 'Medium-high'),
(5, 20, NULL, 'High risk')
) AS ranges(id, lb, ub, label)
INNER JOIN (
SELECT COUNT(DISTINCT Sender) AS SenderCount --, other aggregates
FROM t
GROUP BY Receiver
) AS aggdata ON SenderCount >= lb AND (SenderCount <= ub OR ub IS NULL)
GROUP BY id, lb, ub, label
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347752.html
標籤:sql sql-server sql-server-2008 sql-server-2012 sql-server-2014
上一篇:添加華為套件時出現“Couldnotfindcom.huawei.hms:location:6.0.0.302”錯誤
