首页 > 解决方案 > sql:显示所有行,只是用不同的数字

问题描述

我有两张桌子。让我们说一个演员,其中数据列是 actorid 并且每一行的值都像 101、102、103、104。

现在我有另一个名为 work 的表。它计算用户在某事上工作的次数。它的名字是 workactor,它有两列,actorid 和 typeofwork。

现在我想创建一个查询来计算每个用户做了多少不同的工作。我已经能够使用以下查询来做到这一点:

SELECT actors.actorid, COUNT(*) AS total
FROM workactor 
LEFT OUTER JOIN actors ON workactor.actorid=actors.actorid
GROUP BY workactor.actorid;

现在,虽然这确实计算了每个演员的每种类型的工作,但对于在演员表中但不在工作演员表中的任何演员,它不会显示 0。我不知道问题是什么。

标签: mysqlsql

解决方案


对于 a LEFT JOIN,第一个表是您保留所有行的表。在这种情况下,您需要所有actors。所以首先:

SELECT a.actorid, COUNT(wa.actor_id) AS total
FROM actors a LEFT JOIN
     workactor wa
     ON wa.actorid = a.actorid
GROUP BY a.actorid;

请注意查询的其他更改:

  • 表别名使查询更易于编写和阅读。
  • GROUP BY开启a.actorid。_ 那是因为wa.actorid可能NULL
  • COUNT()正在计算第二个表中的行数,以便它可以返回0。在这种情况下,COUNT(*)永远不会返回0

推荐阅读