以下sql语句为什么会报错: select distinct ename ,trunc(e.comm) c1 from emp e order by e.sal;
时间: 2024-01-12 15:04:45 浏览: 107
经典_Oracle的sql语句百例训练.docx
这个 SQL 语句会报错,因为在 SELECT 子句中使用了一个名为 "e.comm" 的非聚合列,但是在 SELECT 子句中同时使用了 DISTINCT 子句。在 Oracle 中,如果 SELECT 子句中使用了 DISTINCT 子句,则必须确保 SELECT 子句中所有列都是聚合列或常量,否则就会报错。
在这个 SQL 语句中,"e.comm" 不是聚合列,而是普通列,因此不能在 SELECT 子句中使用 DISTINCT 子句。要解决这个问题,可以将 "e.comm" 转换为聚合列,例如使用 AVG(e.comm) 或 MAX(e.comm) 等聚合函数。或者,如果不需要 DISTINCT 子句,则可以将其从 SELECT 子句中删除,例如:
```
SELECT ename, TRUNC(e.comm) c1
FROM emp e
ORDER BY e.sal;
```
这样就可以避免报错,并按照 e.sal 列对结果集进行排序。
阅读全文