mysql - 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。我不知道问题是什么。
解决方案
对于 a LEFT JOIN
,第一个表是您保留所有行的表。在这种情况下,您需要所有actor
s。所以首先:
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
。
推荐阅读
- javascript - 推送事件未在 Service Worker 中触发
- dataframe - 使用覆盖写入空的 spark 数据帧会删除所有现有分区
- typescript - 将 Azure Applications Insights sdk 与 NestJS 记录器一起使用时出现问题
- sql - 在一个表中合计金额并从另一表中连接总金额
- php - Laravel list() with each() function error with deprecated function
- java - 如何使用 spring xml 将 FAIL_ON_UNKNOWN_PROPERTIES 设置为 false
- java - 导出项目并收到此错误
- racket - 如何在 Racket 中将左右箭头写成字符?
- json - PowerShell JSON 日期到文件时间(C++)
- machine-learning - 使用 Keras 创建可以生成新的相似数据的模型