gpt4 book ai didi

sql - 提高 join on subselect 的性能

转载 作者:行者123 更新时间:2023-11-29 12:05:53 28 4
gpt4 key购买 nike

考虑这个表(注释):

         id | post_id |      text
------------+---------|----------------
79507 | 12 | Lorem Ipsum
79544 | 12 | Foo, bar
79545 | 14 | Interesting...

这个聚合查询:

SELECT comment_id, SUM(vote) AS votes
FROM votes
GROUP BY comment_id;

comment_id | votes
------------+-------
79507 | 3
79544 | 4
79545 | 1

我正在寻找加入comments 表和聚合查询,但只对数据的一个非常小的子集感兴趣(只有一个特定的post_id )。这种天真的方法使用子查询来正确返回 post_id 12 的结果:

SELECT comment_id, votes, text FROM comments c LEFT JOIN
(SELECT comment_id, SUM(votes) AS vote
FROM votes
GROUP BY comment_id) AS v
ON c.id = v.comment_id
WHERE c.post_id = 12;

comment_id | votes | text
------------+-------|----------------
79507 | 3 | Lorem Ipsum
79544 | 4 | Foo, bar

然而,这是非常低效的,因为我们正在计算整个表的内部子查询,但我们只对它的一个非常小的子集感兴趣(这个应用程序中的 votes 表很大).

直觉上,我们似乎应该过滤内部查询,而我们在子选择中缺少 WHERE comment_id IN (...)。但是,我们不知道在计算的那个阶段我们需要哪些 comment_id。子选择内的另一个子选择可用于检索适当的 comment_id,但这看起来很笨拙。

我对 SQL 没有经验,不确定是否存在更简洁的解决方案。也许子选择方法是完全错误的。

最佳答案

不确定我是否理解得很好,你不需要这样的东西吗?

SELECT c.id as comment_id, SUM (v.vote) as votes, c.text
FROM comments c
LEFT JOIN votes v ON c.id = v.comment_id
WHERE c.post_id = 12
GROUP BY c.id, c.text

关于sql - 提高 join on subselect 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814725/

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