如何解决有没有办法在没有两个子查询的情况下过滤“唯一”单个值?
所以我的数据库有来自不同商店用户的交易,我只想获取在单个商店购买的用户,而不是多个。我目前正在处理这两个子查询,但加载速度很慢。
and user.id in (
select
u.id
from usertable u
join ordertable o on o.user_id=u.id
join storetable s on s.id = o.store_id
where s.id *(store id)* = #### and o.created at time zone 'Country/City' < '2020-11-01'
and o.status not ilike 'canceled%'
and o.order_kind = 'NORMAL'
)
and u.id not in (
select
u.id
from usertable u
join ordertable o on o.user_id=u.id
join storetable s on s.id = o.store_id
where not in s.id *(store id)* (####) and o.created at time zone 'Country/City' < '2020-11-01'
and o.status not ilike 'canceled%'
and o.order_kind = 'NORMAL'
)
我想获取在 11/2020 之前在“####”商店购买的用户,并且只在该商店购买。有什么想法可以加快速度吗?
解决方法
如果我理解正确,只需使用聚合并具有:
select o.user_id
from ordertable o
where o.created at time zone 'Country/City' < '2020-11-01' and
o.status not ilike 'canceled%' and
o.order_kind = 'NORMAL'
group by o.user_id
having min(o.store_id) = max(o.store_id) and
min(o.store_id) = ####;
请注意,查询不需要 users
和 stores
。所有信息都在 ordertable
中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。