美文网首页
923.【mysql】 only full group by 模

923.【mysql】 only full group by 模

作者: 七镜 | 来源:发表于2024-01-25 06:34 被阅读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;
    

    相关文章

      网友评论

          本文标题:923.【mysql】 only full group by 模

          本文链接:https://www.haomeiwen.com/subject/xepmodtx.html