首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将计数值分组到范围,如1,2到5,超过5

如何将计数值分组到范围,如1,2到5,超过5
EN

Stack Overflow用户
提问于 2021-11-04 13:40:51
回答 2查看 232关注 0票数 0

我有一个交易表,其中包含发送方和接收方的概念,可以发送事务:

现在,我想得到一个结果集,它应该包括每个接收器的唯一发件人的数量范围:

  • one接收来自1发送方
  • 一个接收方从2-5发送方
  • 一个接收者从6-10发送者
  • 一个接收者从11-20发送者

H 110一个接收者接收到20多个发送者h 211f 212

我试过了,但没有得到所需的结果集。有人能帮我一下吗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-04 14:13:14

创建存储范围的(虚拟)表,然后将其与聚合数据连接:

代码语言:javascript
复制
SELECT ranges.*, COUNT(*) 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
票数 1
EN

Stack Overflow用户

发布于 2021-11-04 14:09:07

这将是一个混乱的评论。您并没有真正提供示例数据和期望的输出(我不接受图片作为示例)。总之,您所描述的是一个简单的count():

代码语言:javascript
复制
select receiver, count(distinct sender) senderCount
from myTable
group by receiver
order by count(distinct sender);

就能做到。把结果放进像1,2-5这样的桶里.可以用不同的方式来完成。ie:

代码语言:javascript
复制
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; 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69840174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档