总结一下这周的大部分时间都在跟sql较劲,总结一下自己遇到的几个错误,温故知新。
Oracle 不是 SELECTed 表达式
错误原因:更改select中的数据原来为
1 | select xxx,xxx,a.creat_date ... |
后来改为
1 | select xxx,xxx, |
但没改order by里面的排序数据。
在ORDER BY中指定多个列,结果将先按照子句中的第一列排序,然后第二个,依此类推。
在SELECT中未出现的列名也可用于ORDER BY 子句中,只要TABLE中有就行。
但如果SELECT子句中出现了DISTINCT关键字,则只能用出现过的列名,
而且如果SELECT子句中使用了任何运算符,在ORDER BY 子句中必须保持和SELECT子句中表达式完全一致,否则出现错误:“ORA-01791: 不是 SELECTed 表达式”。
耗时长原因:
1. 对sql语句不熟悉
2. 对错误不熟悉,遇到错误的时候,错误的认为是sql语句中的to_char使用错误,导致长时间的困在如何格式化数据上面。
总结:遇到错误不能错误的猜测你错误的原因,要到网上查,确定错误的原因,不然会做很多的无用功,走错了方向真的越走错的越深。
在连接条件中加查询
1 | SELECT |
在左连接中筛选条件不应写在连接条件中,因为左连接会完整的带出所有的左表数据,后面的连接条件不会起作用,
错误的在连接条件中加入了筛选条件。
在sum函数里面加distinct
代码如下:1
2
3
4
5
6
7
8SUM ( distinct
CASE
WHEN xxxxx THEN
1
ELSE
0
END
)
distinct
加上之后,会把所有的重复1给去掉,最后的结果就只有一个1,就错误的显示总共和为1了。