mysql return count = 0,不使用group by进行联接

雅各布·克兰兹

我有桌子

Image
| ImageId | UserId | SourceId |
| 1       | 1      | 1        |
| 2       | 1      | 2        |
| 3       | 2      | 1        |
| 4       | 2      | 2        |
| 5       | 3      | 1        |
| 6       | 3      | 1        |
| 7       | 3      | 1        |
| 8       | 3      | 1        |
| 9       | 3      | 1        |

然后我有一个查询:

SELECT UserId, IFNULL( COUNT( ImageId ) , 0 ) AS ImageCount, SourceId
FROM Image
GROUP BY UserId, SourceId

当我查询时,我得到

| UserId | SourceId | ImageCount
| 1      | 1        | 1
| 1      | 2        | 1
| 2      | 1        | 1
| 1      | 2        | 1
| 3      | 1        | 5

但是,我不回来的那一行(我想要的)是:

| 3      | 1        | 0

即使计数为0,如何获取行呢?

我所看到的所有问题都必须处理联接(通常是左联接),但是由于这不需要联接,因此我对如何执行此操作感到有些困惑。

戈登·利诺夫(Gordon Linoff)

这确实需要left join多一点。您需要从所有可能的组合开始,然后使用left join来引入现有值:

SELECT u.UserId, COUNT(i.ImageId ) AS ImageCount, s.SourceId
FROM (select distinct UserId from Image) u cross join
     (select distinct SourceId from Image) s left join
     Image i
     on i.UserId = u.UserId and i.SourceId = s.SourceId
GROUP BY u.UserId, s.SourceId;

如果没有匹配项count()则将返回0有没有必要为一个ifcoalescecase声明。

这样做是创建的每一个可能的组合UserIdSourceId(基于数值Image表)。然后,它使用left outer join来连接回该图像。这是做什么的?好吧,对于现有记录,它实际上什么也没做。但是对于那些没有出现在该表的组合,这将增加一个新行u.UserIds.SourceIdNULL在其他领域。这是最终汇总的基础。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL查询的联接表中的GROUP BY,COUNT()

来自分类Dev

使用多个联接进行mysql查询

来自分类Dev

MySQL:使用COUNT()对总金额进行排名

来自分类Dev

使用COUNT ON LEFT JOIN进行MySQL查询

来自分类Dev

在MySQL中使用LIMIT进行左联接子选择

来自分类Dev

如何对MySQL进行联接查询

来自分类Dev

MySQL内部联接管理count()行为

来自分类Dev

MySQL COUNT和GROUP BY

来自分类Dev

MySQL Query with count, group by

来自分类Dev

MySQL的左联接不使用外键

来自分类Dev

MySQL的联接查询不使用索引

来自分类Dev

MySQL:WHERE COUNT(*)= 0

来自分类Dev

MySQL全外部联接3个表,具有group by和count

来自分类Dev

使用COUNT和LEFT JOIN进行缓慢的MYSQL查询

来自分类Dev

在MySQL中使用Count进行自我连接

来自分类Dev

Mysql 使用 max(count/ group by) 使用 join

来自分类Dev

使用COUNT()进行MySQL查询以返回字段等于COUNT值的记录

来自分类Dev

MySQL:如何在执行3向左联接时使用COUNT?

来自分类Dev

Mysql:获取COUNT(B.column)作为B_count和左联接B,其中B_count不等于0

来自分类Dev

MySQL联接查询GROUP BY

来自分类Dev

使用GROUP BY的子查询中的MySQL COUNT

来自分类Dev

使用多个表在mysql中使用联接进行多个联合

来自分类Dev

如何在MySQL中使用两个条件进行内部联接

来自分类Dev

使用子查询进行外部联接会更改mysql中的行数

来自分类Dev

在MySQL查询中进行表联接

来自分类Dev

在MySQL中进行内部联接选择

来自分类Dev

在MySQL中进行内部联接

来自分类Dev

组合group by和count mysql

来自分类Dev

MYSQL删除条件(COUNT = 0)