Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


GROUP BY语句模式(def_group_by_mode)

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

引入版本

v12.1.0

功能描述

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

参数属性

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

使用场景说明

  1. def_group_by_mode 的作用及影响。
def_group_by_mode作用及影响
0标准模式,遵循SQL标准,SELECT 或 ORDER BY 中出现的非聚合列必须在 GROUP BY
子句中显式声明,否则系统上报 E19045 异常。
1MySQL方言写法,允许SELECT 输出列使用非分组列,允许ORDER BY 使用GROUP BY 未包含的列。

示例

  • 在线查看GROUP BY语句模式。
sql
SQL> show def_group_by_mode;

+-------------------+
| DEF_GROUP_BY_MODE |
+-------------------+
| 0                 |
+-------------------+

(1 row)
  • 设置GROUP BY语句模式
sql
-- 创建员工表,包含部门、姓名、工资
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);
    
-- 设置为标准模式
SQL> SET def_group_by_mode TO 0;

-- 尝试按部门分组,但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; 
Error: [E19045] 排序项EMPLOYEES.SALARY无法映射到分组

-- 设置为MySQL方言模式
SQL> SET def_group_by_mode TO 1;

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       |
+------------+---------------+------------+

(3 rows)