gpt4 book ai didi

mysql - 连接查询来计算记录数计数不正确

转载 作者:行者123 更新时间:2023-11-29 09:01:30 24 4
gpt4 key购买 nike

我有一个类别表,其工作方式有点类似于 StackOverflow 上的标签。有一些类别,例如 JavaScript,它是顶级类别,也许还有 jQuery,它是 JavaScript 的子类别。

我想要查询的是每个类别下有多少条记录(在我的应用程序中它们是“问题”)。

这是我到目前为止的 SQL。 Problem_categories 只是一个连接表,其中包含 Problem_id 和 Category_id。

select problems.problem_id , categories.category_id , category_name , count(problems.problem_id) as num_problems , is_top
from problems
left join problem_categories on
problems.problem_id = problem_categories.category_id
left join categories on
problem_categories.category_id = categories.category_id
where is_top = 1;

这仅返回一行。我所希望的是返回 is_top = 1 的记录数(这意味着它是顶级类别)。

我如何更改我的查询来做到这一点?

谢谢!!

最佳答案

不用猜测逻辑,问题是你需要一个GROUP BY来计数:

SELECT problems.problem_id, categories.category_id, category_name, 
COUNT(problems.problem_id) as num_problems, is_top
FROM problems
LEFT JOIN problem_categories
ON problems.problem_id = problem_categories.category_id
LEFT JOIN categories
ON problem_categories.category_id = categories.category_id
WHERE is_top = 1;
GROUP BY problems.problem_id, categories.category_id, category_name

但是,如果您想要每个顶级类别的问题数量,您的逻辑可能会像这样:

SELECT category_name, categories.category_id, problems.problem_id, 
COUNT(problems.problem_id) as num_problems
FROM categories
JOIN problem_categories
ON problem_categories.category_id = categories.category_id
JOIN problems
ON problems.problem_id = problem_categories.category_id
WHERE is_top = 1;
GROUP BY category_name, categories.category_id, problems.problem_id

请注意:

  • 对于每个类别,您都会遇到问题,然后对这些问题进行计数
  • 您使用 JOIN 而不是 LEFT JOIN,因为您并不关心没有问题的类别。
  • 您可以将 is_top 保留在选择之外,因为无论如何您都将其放入 WHERE 子句中。选择不在 GROUP BY 中的内容将获得任何随机值,但由于所有值均为 1,因此您可以安全地执行此操作,或者直接保留它。

关于mysql - 连接查询来计算记录数计数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448770/

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