923.【mysql】 only full group by 模

2024-01-25  本文已影响0人  七镜

MySQL 中的"Only Full Group By"模式是指在执行 SQL 查询时,如果使用了 GROUP BY 子句,那么 SELECT 子句中的列必须是以下两种情况之一:

  1. GROUP BY 子句包含的列。
  2. 聚合函数(如 COUNTSUMMAXMIN 等)。

这是为了确保查询的结果集对每个分组都是唯一的,避免数据的不明确性。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;
上一篇下一篇

猜你喜欢

热点阅读