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;