我正在尝试选择每个作者在我桌子上的文章数量。 这是我到目前为止所得到的:
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代码
答案 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