【发布时间】:2018-11-21 11:07:56
【问题描述】:
我有一张“发票”表
id integer Primary key
customer_id Integer
total Number (*,2)
查询是向别名为“SNO”的每个客户显示所有customer_id、total 和running 序列号。并且记录应该根据customer_id升序显示,然后按SNO显示。
提示:
- 分析函数:ROW_NUMBER( )
- 分析子句:query_partition_clause 和 order_by_clause。
我写了以下查询:
Select customer_id,
total,
ROW_NUMBER( ) OVER (PARTITION BY customer_id ORDER BY customer_id ASC) AS "SNO"
from invoice;
但是结果失败了。我错过了什么。还有什么意思是“记录应该根据customer_id然后按SNO升序显示”。
我得到的结果如下:
CUSTOMER_ID 总 SNO
1 70000 1
2 250000 1
2 560000 2
3 200000 1
3 45000 2
4 475000 1
5 50000 1
5 10000 2
6 600000 1
6 90000 2
预期结果是:
CUSTOMER_ID 总 SNO
1 70000 1
2 250000 1
2 560000 2
3 45000 1
3 200000 2
4 475000 1
5 10000 1
5 50000 2
6 600000 1
6 90000 2
TOTAL 列数据不匹配。
【问题讨论】:
-
你得到什么错误?
-
“结果失败”——这是什么意思?你有错误吗?错误的结果?按同一列进行分区和排序是奇数且不确定的;是否有其他列,例如您可以订购的时间戳? “然后由 SNO” 并没有真正帮助你生成......
-
我得到了错误的结果。没有时间戳列。
-
你得到的结果 are 由 SNO 排序(尽管正如 dnoeth 提到的,你仍然应该有一个明确的 order-by 子句真的)。您似乎希望它们按总数排序,并让 SNO 进行跟踪;但是您的问题和您似乎引用的作业实际上并没有说明应该如何找到“运行序列号”。将您的
row_number()更改为按id或total订购似乎是显而易见的步骤,但目前尚不清楚哪个(如果有的话)是正确的,因为在您向我们展示的内容中没有指定。
标签: sql oracle window-functions