MySQL 中的"Only Full Group By"模式是指在执行 SQL 查询时,如果使用了 GROUP BY
子句,那么 SELECT
子句中的列必须是以下两种情况之一:
- 被
GROUP BY
子句包含的列。 - 聚合函数(如
COUNT
、SUM
、MAX
、MIN
等)。
这是为了确保查询的结果集对每个分组都是唯一的,避免数据的不明确性。MySQL 中从 MySQL 5.7.5 版本开始引入了这个"Only Full Group By"模式。
考虑以下表结构:
CREATE TABLE sales (
product_id INT,
product_name VARCHAR(255),
category VARCHAR(255),
amount INT
);
INSERT INTO sales VALUES (1, 'Product A', 'Electronics', 100);
INSERT INTO sales VALUES (2, 'Product B', 'Clothing', 200);
INSERT INTO sales VALUES (1, 'Product A', 'Electronics', 150);
|如果执行以下查询:
SELECT product_id, product_name, category, amount
FROM sales
GROUP BY category;
在"Only Full Group By"模式下,这将导致错误,因为 product_id
, product_name
, 和 amount
列没有被包含在 GROUP BY
子句中,也不是聚合函数。
为了修复这个问题,可以将这些列包含在 GROUP BY
子句中,或者对它们使用聚合函数。例如:
-- 包含所有列在 GROUP BY 子句中
SELECT product_id, product_name, category, SUM(amount) as total_amount
FROM sales
GROUP BY product_id, product_name, category;
-- 或者对非聚合列使用聚合函数
SELECT MAX(product_id) as product_id, MAX(product_name) as product_name, category, SUM(amount) as total_amount
FROM sales
GROUP BY category;
网友评论