0

请帮我处理这个 SQL 查询;当我使用GROUP BY子句时,我从 Mysql 收到此错误:

这与 sql_mode=only_full_group_by 不兼容

我想要列上的不同值:B.shopname。

SELECT 
    A.id,
    COUNT(A.id),
    A.idShop,
    B.shopname
FROM 
    A 
INNER JOIN 
    B ON A.idShop = B.id
GROUP BY 
    B.shopname
4

1 回答 1

0

GROUP BY与列不兼容SELECT。为什么?该查询正在尝试SELECT三个未聚合的列A.idA.idShopB.shopname。但是,GROUP BY仅包括其中之一。

一般建议是将所有未聚合的列添加到GROUP BY

SELECT A.id, COUNT(A.id), A.idShop, B.shopname
FROM A INNER JOIN
     B
     ON A.idShop = B.id
GROUP BY A.id, A.idShop, B.shopname;

但我不认为这会做你想要的。我猜这COUNT()将永远是1。我怀疑你想要:

SELECT B.idShop, B.shopname, COUNT(*)
FROM A INNER JOIN
     B
     ON A.idShop = B.id
GROUP BY B.id, B.shopname;

笔记:

  • A.id已经不在了SELECT。这是不合适的,因为您想计算这些值。
  • 我怀疑那A.id是永远的NULL,所以计算NULL列的非值只会使查询混乱。 COUNT(*)更清晰(尽管有些人更喜欢COUNT(1))。
  • 最好让GROUP BY所有键都来自同一个表,因为它为优化器提供了更多选项。
于 2021-03-08T13:13:12.873 回答