为什么此聚合查询返回的行比应有的少一行?

发布于 2024-10-03 04:51:40 字数 421 浏览 3 评论 0原文

我有一个经典的“获取一个表中的所有行以及另一个表中相应行数”的问题,该问题应该通过此查询来解决:

SELECT
    ideas.id,
    ideas.idea,
    submitted,
    COUNT(votes.id) AS vote_count
FROM ideas
LEFT OUTER JOIN votes ON ideas.id = votes.idea
WHERE dead = 0
GROUP BY votes.idea
ORDER BY vote_count DESC, submitted DESC
LIMIT 10;

想法中有 4 行(dead = 0),投票中有一行(与第一个想法)。但是,此查询返回具有正确 vote_counts 的两条记录(idea #1 和 idea #2)。为什么这没有返回创意中的所有记录?

I have the classic 'get all rows in one table with number of corresponding rows in another table' issue which should be solved by this query:

SELECT
    ideas.id,
    ideas.idea,
    submitted,
    COUNT(votes.id) AS vote_count
FROM ideas
LEFT OUTER JOIN votes ON ideas.id = votes.idea
WHERE dead = 0
GROUP BY votes.idea
ORDER BY vote_count DESC, submitted DESC
LIMIT 10;

There are 4 rows (with dead = 0) in ideas and one row in votes (relating to the first idea). However this query returns two records (idea #1 and idea #2) with correct vote_counts. Why is this not returning all of the records in ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹤仙姿 2024-10-10 04:51:40

当您说GROUP BY votes.idea时,您要求为投票中的每个想法值提供一个结果行。由于您说 votes 只有一行,因此您应该期望结果中只有两条记录 - 一条对应于该行投票中的想法值,另一条记录为 NULL(压缩没有匹配投票记录的三行)。

您指的是GROUP BY ideas.idea吗?

When you say GROUP BY votes.idea, you are asking for one result row per idea value in votes. Since you say votes has only one row, you should expect only two records in the result — one corresponding to the idea value in that row of votes, and the other with NULL (condensing the three rows with no matching vote record).

Did you mean GROUP BY ideas.idea?

空气里的味道 2024-10-10 04:51:40

更改:

GROUP BY votes.idea

为:

GROUP BY ideas.id

因为 votes.idea 可以为 NULL。

Change:

GROUP BY votes.idea

to:

GROUP BY ideas.id

Because votes.idea can be NULL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文