我有一个表,其中存储了客户端与网页之间的交互类型(为了清晰起见简化了)。这些列是:月、客户机id、交互类型、进行交互的次数
month clientId interactionType numberOfInteractions
--------- ---------- ----------------- ----------------------
2020-01 123 click 1
2020-01 123 scroll 2
2020-01 123 hover 1
2020-01 89 click 12
2020-01 65 hover 6
2020-01 65 scroll 8
2020-02 89 click 12
2020-02 89 scroll 9
我每月只想选择交互总数大于每个客户端阈值的条目。
例如,如果我选择的值为4,则只会选择scroll、hover和click之间交互总数大于或等于4的客户机条目。将此逻辑应用于我的表,将返回所有8个条目。
但是,如果我将阈值更改为10,则只返回以下条目(因为每个交互类型、每个客户端、每个月的numberofinteractions之和大于10)
month clientId interactionType numberOfInteractions
--------- ---------- ----------------- ----------------------
2020-01 89 click 12
2020-01 65 hover 6
2020-01 65 scroll 8
2020-02 89 click 12
2020-02 89 scroll 9
我的解决方案是创建一个cte,将按月份和clientid分组的交互数相加,然后将其连接到原始表中。例如
with temp as (
select
i.*,
sum(numberOfInteractions)
from
interactions a
group by
a.month,
a.clientId,
a.interactionType,
a.numberOfInteractions
)
select
*
from
interactions b
join
temp on temp.month = b.month and temp.clientId = b.clientId
有人能推荐一个允许在聚合级别进行这种过滤的查询吗?
1条答案
按热度按时间svujldwt1#
使用窗口功能: