谁能解决这个mysql语句在哪里计数的问题?
我将两个表连接在一起,我只想列出那些行,这些行的分组行数与表A的值不匹配谁能解决这个mysql语句在哪里计数的问题?,mysql,sql,group-by,aggregate-functions,Mysql,Sql,Group By,Aggregate Functions,我将两个表连接在一起,我只想列出那些行,这些行的分组行数与表A的值不匹配 table A id name pieces 1 name_1 6 2 name_2 2 table B a_id 1 1 2 2 因此,我想要的是获取所有a.name,其中a.piece是分组行计数的。 大概是这样的: SELECT a.name FROM a INNER JOIN b ON a.id = b.a_id WH
table A
id name pieces
1 name_1 6
2 name_2 2
table B
a_id
1
1
2
2
因此,我想要的是获取所有a.name,其中a.piece是分组行计数的。
大概是这样的:
SELECT a.name
FROM a
INNER JOIN b
ON a.id = b.a_id
WHERE a.pieces <> Count(*)
GROUP BY id
name count
name_1 2
因为name_1有表.b中的2个分组行,并且它与6的.piece不匹配。您可以在pieces上使用MAX,因为它只是一个标量值,所以不会有任何区别。这也将使查询仅符合“完整”模式下的“分组”
您可以聚合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
而不是!==我想写<>但是stackoverflow没有显示字符组合。你能告诉我什么是唯一的“满”组吗?@Ninet9检查这个答案:谢谢。我可以接受这些严格的规则。@Ninet9是的,你应该使用严格模式,因为这是正确的方式,符合ANSI标准
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(*)
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