Skip to content

适用虚谷数据库版本

v12.10.8



适用虚谷数据库版本

v12.10.8


GROUP BY语句模式(def_group_by_mode)

📄字数 992
👁️阅读量 加载中...

引入版本

v12.1.0

功能描述

def_group_by_mode用于指定GROUP BY语句模式。

参数属性

属性属性值
参数类型INTEGER
默认值0
取值范围{0,1}
影响范围系统级
修改方式在线修改,立即生效

使用场景说明

  1. 该参数控制系统内部 SQL 引擎在解析处理 GROUP BY 语句时的行为。
def_group_by_mode作用及影响
0标准模式,遵循SQL标准,SELECT 或 ORDER BY 中出现的非聚合列必须在 GROUP BY
子句中显式声明,否则系统上报 E19045 异常。
1MySQL方言写法,允许SELECT 输出列使用非分组列,允许ORDER BY 使用GROUP BY 未包含的列。

示例

sql
-- 在线设置 def_group_by_mode
SQL> SET def_group_by_mode TO 0;

-- 在线查看 def_group_by_mode
SQL> SHOW def_group_by_mode;

/*
 * 场景一:
 *  1. def_group_by_mode = 0;
 */

-- 创建员工表,包含部门、姓名、工资
SQL> CREATE TABLE employees (
    department VARCHAR(50),
    employee_name VARCHAR(50),
    salary DECIMAL(10, 2)
);

-- 插入测试数据
SQL> INSERT INTO employees VALUES 
    ('Sales', 'Alice', 5000),
    ('Sales', 'Bob', 6000),
    ('HR', 'Charlie', 4500),
    ('HR', 'David', 5500),
    ('IT', 'Eve', 7000);

/*   
 * 尝试按部门分组,但 SELECT 和 ORDER BY 包含非聚合列
 * salary 未在GROUP BY中,也未聚合
 */
SQL> SELECT department, employee_name, AVG(salary) AS avg_salary FROM employees GROUP BY department ORDER BY salary DESC; /* 执行报错 E19045 */

/*
 * 场景二:
 *  1. def_group_by_mode = 1;
 *  2. 基于 '场景一' 的数据和环境;
 */

SQL> SELECT department, employee_name, AVG(salary) AS avg_salary FROM employees GROUP BY department ORDER BY salary DESC;

/*
 * 执行成功,输出结果集:
 *
 * +------------+---------------+------------+
 * | DEPARTMENT | EMPLOYEE_NAME | AVG_SALARY |
 * +------------+---------------+------------+
 * | IT         | Eve           | 7000       |
 * | Sales      | Alice         | 5500       |
 * | HR         | Charlie       | 5000       |
 * +------------+---------------+------------+
*/