SQL 查询 GROUP BY 子句中的错误; sql_mode=only_full_group_by

时间:2021-03-08 07:55:19

标签: mysql sql select group-by sql-mode

请帮我处理这个 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

1 个答案:

答案 0 :(得分: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 键都来自同一个表,因为它为优化器提供了更多选项。