繁体   English   中英

在分组依据之前计算行数

[英]Count Rows before Group By

我想计算按ID分组后的文章数(预期为2 ),但是由于它计算GROUP BY之后的出现次数,因此它目前仅返回带有1行。

    article:
    +-------+---------+
    |  id   |  name   |
    +-------+---------+
    |   1   |  Apple  |
    |   2   |  Orange | 
    |   3   |  Peaches| 
    +-------+---------+


    article_category:
    +---------------+----------------+
    |  article_id   |  category_id   |
    +---------------+----------------+
    |       1       |        1       |
    |       1       |        2       |
    |       1       |        3       |
    |       2       |        1       |
    +---------------+----------------+

可以在没有子查询且没有使用SQL_CALC_FOUND_ROWS情况下完成此操作吗? (由于使用API​​端点,我受到很大限制)。 我唯一的另一个想法是简单地检索所有id,然后用PHP计算它们。

这是我当前的查询:

SELECT COUNT(DISTINCT a.id) as number_articles
FROM article a
INNER JOIN article_category c ON a.id = c.article_id
WHERE c.category_id IN (1, 2, 3)
GROUP BY a.id;

所需的输出:

    +--------------------+
    |  number_articles   | 
    +--------------------+
    |          2         |
    +--------------------+

这是注释中建议的SQLFiddle: http ://sqlfiddle.com/#!9/8b2975/1

根据您现在添加的预期结果。 您可以删除GroupBy,它在这里确实没有取得太大成就,这应该可以工作:

select count(distinct a.id)
from article a
INNER JOIN article_category c ON a.id = c.article_id
WHERE c.category_id IN (1, 2, 3)

请尝试以下解决方案。

select count(DISTINCT a.id) as total
from article a
INNER join article_category c on a.id = c.article_id 
WHERE category_id in (1,2,3);

结果:

total
2

仅计算c.category_id的值而不是a.id

SELECT COUNT(c.category_id) FROM article a INNER JOIN 
article_category c ON a.id = c.article_id WHERE c.category_id 
IN (1, 2, 3) GROUP BY a.id;
SELECT COUNT(DISTINCT a.id)

FROM article a

INNER JOIN article_category c ON a.id = c.article_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM