gpt4 book ai didi

mysql - 不在子查询中的不同 ID 的计数?

转载 作者:行者123 更新时间:2023-11-30 23:46:46 25 4
gpt4 key购买 nike

好的,我正在尝试统计在给定月份购买了某物但在之前的任何一个月内都没有购买过某物的用户数(例如,算出每个月有多少新用户) ,所以这是我有点想做的,但它显然不起作用:

SELECT COUNT(DISTINCT user_id NOT IN (
SELECT user_id
FROM payment
WHERE amount > 0
AND MONTH(payment_date) < "10"
GROUP BY user_id
) AS new_users_count
FROM payment
WHERE amount > 0
AND MONTH(payment_date) >= "10"

如果我使用“DISTINCT”,它会返回 0 个计数。

如果我把它取出来,它会返回所有用户,新老用户。

另外,在 COUNT() 中有一个子查询需要一段时间来处理。

有什么方法可以用 SUM(IF...) 来完成吗?或者任何其他更优化的方式?

我到处寻找想法/解决方案,就是想不通。

最佳答案

将标准放在您的 WHERE 子句中。使用 NOT EXISTSNOT IN

select count(distinct user_id)
from payment
where amount > 0
and month(payment_date) >= 10
and user_id not in
(
select user_id
from payment
where amount > 0
and month(payment_date) < 10
);

这里有一个条件聚合的替代方案:

select count(*)
from
(
select user_id
from payment
where amount > 0
group by user_id
having sum(month(payment_date) >= 10) > 0
and sum(month(payment_date) < 10) = 0
) t;

关于mysql - 不在子查询中的不同 ID 的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342246/

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