我正在运行mysql查询-
SELECT
u.userid, u.lastopen,
r.auto_renew_status, r.product_id, r.is_trial_period,
(SELECT count(apd.id) FROM apple_purchase_details as apd
WHERE apd.id = u.userid
GROUP BY u.userid
HAVING count(apd.id) < 5
) as total
FROM users as u, receipt as r
WHERE u.userid = r.id and r.is_trial_period = 'false' and r.auto_renew_status = 0
查询工作正常,但正在返回 NULL
如果总和大于5。
当我尝试添加 ORDER BY
条款 u.lastopen
装载时间太长。我已经索引了 lastopen
在 users
table。
有人能帮我吗?
3条答案
按热度按时间dojqjjoe1#
我认为在主查询之前计算计数并将其保存在temp表中有助于提高效率,还可以使用inner join关键字。请尝试下面的查询。可以设置首选项而不是空值(而不是0):
rt4zxlrg2#
它回来了
NULL
哪里total
大于5,因为您指定了HAVING count(apd.id) < 5
,这意味着子查询在大于5时将不返回任何内容,从而导致NULL
特定行的值。如果你不想这种行为,删除
HAVING
子查询中的约束。这个查询从多个表中检索数据,以此类推
lastopen
在users
帮不了什么忙。我将在中使用的列上创建索引JOIN
ON
条款。更新
要获得所需的结果,请尝试:
knsnq2tg3#
当appid大于或等于5时,您的子查询将返回null,因此您将获得null。如果您不想使用null,请使用条件case..when..end将null替换为所需的值。