这是我的MySQL查询
SELECT sum(quantity) as quantity_sold, `gc_order_items`.`name` as `name`, `sku` FROM `gc_orders` JOIN `gc_order_items` ON `gc_order_items`.`order_id` = `gc_orders`.`id` WHERE `status` != 'cart' AND `gc_order_items`.`type` = 'product' GROUP BY `product_id`
我在本地服务器上收到此错误。
SELECT列表的表达式#2不在GROUP BY子句中并且包含 非聚合列'go.gc_order_items.name'不是 功能上依赖于GROUP BY子句中的列;这是 与sql_mode = only_full_group_by不兼容 请帮忙!
答案 0 :(得分:2)
这是您当前的查询:
SELECT
SUM(quantity) AS quantity_sold,
gc_order_items.name AS name,
sku
FROM gc_orders
INNER JOIN gc_order_items
ON gc_order_items.order_id = gc_orders.id
WHERE status != 'cart' AND
gc_order_items.type = 'product'
GROUP BY product_id
在本地计算机上,很可能已启用ONLY_FULL_GROUP_BY模式。在这种与ANSI SQL标准一致的模式下,GROUP BY
聚合查询中的每一列必须出现在GROUP BY
子句中或出现在聚合函数中,例如SUM()
。对于上述查询,您选择的是sku
和name
列,但它们不会出现在GROUP BY
中,也不会出现在聚合函数中,因此会出现错误。
在直播机器上,我的猜测是关闭了严格模式,这样就可以继续进行查询了。
以下是对可在任何地方正确运行的查询版本的猜测:
SELECT
t2.quantity_sold,
t2.name,
t1.sku
FROM gc_orders t1
INNER JOIN
(
SELECT order_id, name, SUM(quantity) AS quantity_sold
FROM gc_order_items
WHERE type = 'product'
GROUP BY order_id, name
) t2
ON t1.id = t2.order_id
WHERE t1.status != 'cart'