有人能解决这个mysql语句在哪里计数的问题吗?

3zwtqj6y  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(254)

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

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

这将导致组函数的无效使用
我也试过这个:

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

错误:未知列“count”
因此,在本例中,我只希望接收1行,如下所示:

name     count
name_1     2

因为 name_1 中有2个分组行 table.b 而且不匹配 a.piece 是6。

wqlqzqxt

wqlqzqxt1#

您可以聚合tableb中的数据并将其与tablea联接:

SELECT tablea.name
FROM tablea
INNER JOIN (
    SELECT a_id, COUNT(*) AS c
    FROM tableb
    GROUP BY a_id
) AS groupedb ON tablea.id = tableb.a_id
WHERE tablea.pieces <> groupedb.c
a6b3iqyw

a6b3iqyw2#

你可以用 MAX()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(*)

相关问题