试图通过子查询获取作者的帖子数量

时间:2016-02-04 18:27:00

标签: mysql sql

我正在尝试选择每个作者在我桌子上的文章数量。 这是我到目前为止所得到的:

SELECT
    (SELECT COUNT(*) FROM tb_artigos as b WHERE a.id_autores = b.id_autores) as total
FROM tb_autores as a
GROUP BY
    total
ORDER BY
    total desc

我猜它错了,因为它只返回19行,我有24位作者。另一个问题是我需要每个作者的id,并且上面的查询我只得到总值。

有人可以帮我吗?

编辑:修复sql代码

4 个答案:

答案 0 :(得分:3)

通常,这将使用显式JOIN来完成。但是,相关子查询很好。问题是你的GROUP BY条款。正确的GROUP BY位于作者ID:

SELECT a.id_autores,
       (SELECT COUNT(*) FROM tb_artigos as b WHERE a.id_autores = b.id_autores) as total
FROM tb_autores a 
GROUP BY a.id_autores 
ORDER BY total desc;

我建议您将此查询的结果与查询进行比较,并尝试理解两个结果集之间的差异(除了每行的作者ID)。

答案 1 :(得分:1)

有些作者可能没有任何文章,这意味着你不会从简单的JOIN中得到任何东西。使用此LEFT OUTER JOIN,作者将是24:

SELECT tb_autores.id_autores, COUNT(*)
FROM tb_autores
    LEFT OUTER JOIN tb_artigos
    ON tb_autores.id_autores = tb_artigos.id_autores
GROUP BY tb_autores.id_autores;

这也是编写该查询的最快,最正确的方法。

答案 2 :(得分:1)

假设表格中每篇文章有一行,我就是这样做的:

SELECT A.id_autores, B.nombre_autores, COUNT(*) FROM tb_artigos AS A
RIGHT OUTER JOIN tb_autores AS B ON A.id_autores=B.id_autores
GROUP BY A.id_autores, B.nombre_autores

问候。

答案 3 :(得分:0)

这是另一个解决方案,我在使用join而不是sub查询的单个查询中解决您的问题。

SELECT a.id_autores, count( b.id_autores ) AS total FROM `tb_artigos` b, `tb_autores` a WHERE a.id_autores = b.id_autores GROUP BY b.id_autores ORDER BY total DESC

这将输出如下:

id_autores      total
    77          4581
    106         166
    22          102
    2           81
    70          47
    38          25
    72          6
    71          4
    84          2
    1           2
相关问题