gpt4 book ai didi

sql - 如何根据属性的重要性计算具有一对多关系的记录

转载 作者:行者123 更新时间:2023-12-04 08:27:13 26 4
gpt4 key购买 nike

我正在尝试获取按分组和源字段分组的操作计数。问题是, Action 和来源之间存在一些重叠。因此,如果在两个来源中都找到了 x.id,我希望一个来源优先于另一个来源。

select x.grouping, o.source, o.event, count(o.event) event_count
from xtable x
join etable e on x.id = e.id
join otable o on x.xid = o.oid
where e.pass = '1'
and o.source in ('205','206')
group by grouping, o.event, o.source;
id 和 xid, oid 只是在表上标识允许我们加入的 id。
结果如下:
group|  source | event  | event_count
QU1 | 205 | A | 75
QU1 | 205 | B | 7
QU1 | 205 | C | 34
QU1 | 206 | A | 103
QU1 | 206 | B | 65
QU1 | 206 | C | 12
我遇到的问题是该组中的记录总数为 195 条记录,因此其中一些记录被计算不止一次。
我的问题是,如何根据来源让记录计数一次?例如,源 205 比 206 更准确,因此我宁愿将这些事件计入 205 事件,而不包括在 206 事件计数中。但是如果 ID 不在 205 事件中,那么它应该被计算在内。 id 可能在不同来源的两个不同事件中,在这种情况下,如果它在 205 中找到,它仍然不应该被计算在 206 中。
更新后的结果可能类似于:
group|  source | event  | event_count
QU1 | 205 | A | 75
QU1 | 205 | B | 7
QU1 | 205 | C | 34
QU1 | 206 | A | 28
QU1 | 206 | B | 58
QU1 | 206 | C | 12
有任何想法吗?提前致谢

最佳答案

嗯。 . .您可以使用 row_number()对于优先级——只选择一个事件。然后汇总:

select grouping, source, event, count(*) as event_count
from (select x.grouping, o.source, o.event,
row_number() over (partition by x.grouping, o.event order by o.source) as seqnum
from xtable x join
etable e
on x.id = e.id join
otable o
on x.xid = o.oid
where e.pass = '1' and o.source in ('205', '206')
) xeo
where seqnum = 1
group by grouping, o.event, o.source;
注意:这里假设 205优先于 206 .

关于sql - 如何根据属性的重要性计算具有一对多关系的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65204695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com