在sql_mode=only_full_group_by模式,其它列应该使用什么函数查询
时间: 2023-10-12 15:10:43 浏览: 76
在sql_mode=only_full_group_by模式下,如果SELECT语句中包含GROUP BY子句,则必须使用聚合函数或者在GROUP BY子句中列出所有非聚合列,否则会产生错误。
如果要查询非聚合列,在SELECT语句中,可以使用任意一个聚合函数(如SUM、AVG、MAX、MIN等),或者使用非聚合函数(如CONCAT、SUBSTR、LEFT、RIGHT等),或者在GROUP BY子句中列出所有非聚合列,以避免错误的发生。
例如,以下查询是正确的:
```
SELECT department, SUM(salary), COUNT(*)
FROM employees
GROUP BY department;
```
以下查询也是正确的:
```
SELECT department, name, MAX(salary)
FROM employees
GROUP BY department, name;
```
而以下查询在sql_mode=only_full_group_by模式下会产生错误:
```
SELECT department, name, salary
FROM employees
GROUP BY department;
```
因为在GROUP BY子句中没有列出所有非聚合列,也没有使用聚合函数,所以会产生错误。
相关问题
在sql_mode=only_full_group_by模式下,其它内容使用聚合函数取值,会很慢吗
在 `sql_mode=only_full_group_by` 模式下,如果查询中使用了聚合函数,那么除了聚合函数以外的列必须在 GROUP BY 子句中出现,否则会抛出错误。
这个模式下的查询可能会比较慢,因为 MySQL 在执行聚合操作时必须对查询结果进行排序和分组,而这个过程可能会消耗大量的 CPU 和内存资源。如果查询中还包含了其它的非聚合函数,那么这些函数也会对查询性能产生影响。
如果你的查询中包含了多个聚合操作,可以考虑使用子查询或者临时表来优化查询性能。此外,还可以考虑增加索引或者优化查询语句,以尽可能减少排序和分组的操作,从而提高查询性能。
group by 出现 sql_mode=only_full_group_by 如何查询所有列
在 `sql_mode=only_full_group_by` 模式下,如果 `SELECT` 语句中使用了 `GROUP BY`,那么查询的列必须是 `GROUP BY` 后的列或者聚合函数,否则会报错。如果你要查询所有列,可以使用以下两种方法:
1. 在 `GROUP BY` 子句中列出所有列
```
SELECT col1, col2, col3, SUM(col4)
FROM table
GROUP BY col1, col2, col3;
```
这种方法需要手动列出所有的列,比较麻烦,但是可以确保查询结果的正确性。
2. 使用聚合函数
```
SELECT *, SUM(col4)
FROM table
GROUP BY col1, col2, col3;
```
这种方法使用了 `*` 通配符和聚合函数,可以自动查询所有列,但是需要注意,如果有某些列不是分组依据,也不是聚合函数,那么这些列的值可能是不确定的。
需要根据具体情况选择使用哪种方法。
阅读全文