gpt4 book ai didi

MySQL COUNT 与 WHERE 和 HAVING 以及 ORDER BY 在同一查询中

转载 作者:行者123 更新时间:2023-11-29 16:48:21 24 4
gpt4 key购买 nike

我正在运行 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。

此外,当我尝试在 u.lastopen 上添加 ORDER BY 子句时,加载时间太长。我已经在 users 表中索引了 lastopen

谁能帮我解决这个问题吗?

最佳答案

它正在返回NULL哪里total大于 5,因为您使用 HAVING count(apd.id) < 5 指定了此值,这意味着当子查询大于 5 时将不返回任何内容,结果是 NULL该特定行的值。

如果您不希望出现这种行为,请删除 HAVING子查询中的约束。

此查询从多个表中检索数据,因此索引 lastopenusers没有多大帮助。我将在 JOIN 中使用的列上创建索引ON条款。

更新

要获得所需的结果,请尝试:

SELECT
u.userid, u.lastopen,
r.auto_renew_status, r.product_id, r.is_trial_period,
FROM users as u
JOIN receipt as r ON u.userid = r.id
JOIN (
SELECT id, count(apd.id) FROM apple_purchase_details
GROUP BY id
HAVING apd.id > 5
) as apd ON apd.id = u.userid
WHERE r.is_trial_period = 'false' and r.auto_renew_status = 0

关于MySQL COUNT 与 WHERE 和 HAVING 以及 ORDER BY 在同一查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52969966/

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