首页 > 解决方案 > 谁能解决这个mysql语句WHERE COUNT问题?

问题描述

我将两个表连接在一起,我只想列出那些分组的行数与表 A 的值不匹配的行。

table A
id     name    pieces
1      name_1    6
2      name_2    2

table B
a_id
1
1
2
2

所以我想要的是获取 a.piece<> 分组行计数的所有 a.name。
像这样的东西:

SELECT a.name
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
WHERE  a.pieces <> Count(*)
GROUP  BY id  

这导致 group 函数的无效使用
也尝试了这个:

SELECT a.name,
       Count(*) AS count
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
WHERE  a.pieces <> count
GROUP  BY id 

错误:未知列“计数”

在这种情况下,我只想收到这样的 1 行:

name     count
name_1     2

因为name_1有 2 个分组的行table.b,它不匹配a.piece是 6。

标签: mysqlsqlgroup-byaggregate-functions

解决方案


您可以使用MAX()on pieces,因为它只是一个标量值,它不会产生影响。这也将使查询符合only_full_group_by模式

SELECT a.id, a.name, COUNT(*) AS count
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
GROUP  BY a.id, a.name 
HAVING MAX(a.pieces) <> COUNT(*) 

推荐阅读