sql - 如何优化嵌套查询?

标签 sql mysql nested-queries

我能否以某种方式连接表并避免在以下 MySQL 查询中使用 distinct。 invited_by_id 显示邀请此用户的用户 ID。

SELECT
    user1.id, count(distinct user2.id) AS theCount, count(distinct user3.id) AS theCount2
FROM
    users AS user1
LEFT OUTER JOIN
    users AS user2 ON user2.invited_by_id=user1.id
LEFT OUTER JOIN (
    SELECT id, invited_by_id FROM users WHERE signup_date >= NOW() - INTERVAL 30 DAY
) AS user3 ON user3.invited_by_id=user1.id
GROUP BY user1.id;

最佳答案

我在这里假设您正在尝试统计某个用户被邀请的次数以及该用户在过去 30 天内被邀请的次数。

在这种情况下,您可以使用简单的条件总和进行查询:

select user1.id, count(user2.id) as tehCount, sum(user2.signup_date >= NOW() - INTERVAL 30 DAY) as theCount2
from users as user1
left outer join users as user2 on user2.invited_by_id = user1.id
group by user1.id

如果 theCount2 中的空值会成为问题,请使用合并作为:

coalesce(sum(user2.signup_date >= NOW() - INTERVAL 30 DAY), 0)

关于sql - 如何优化嵌套查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160547/

相关文章:

sql - 带条件的 T-SQL OVER/PARTITION BY 查询

Mysql组复制无法添加实例

database - 使用top_hits字段和脚本顺序进行Elasticsearch聚合

LINQ 抛出查询嵌套太深异常

MySQL: "order by"内部的 "group by"

sql - 如何将第一个查询的输出(有两个值)作为第二个查询的输入?

mysql - MySQL 中的内部/外部连接问题

mysql - regexp_like 在 MySQL 中有类似的功能吗?

mysql - 使用选择重复项的语句,通过单个 SQL 命令从表中删除重复项

MySql 指定为定义者的用户 ('mysql.infoschema' @'localhost' ) 不存在