oracle – PARTITION BY 1是什么意思?

对于一对游标,其中在第一个FETCH之后立即需要结果集中的总行数(在一些试错之后),我想出了下面的查询

SELECT
 col_a,col_b,col_c,COUNT(*) OVER( PARTITION BY 1 ) AS rows_in_result
FROM 
 myTable JOIN theirTable ON
 myTable.col_a = theirTable.col_z
GROUP BY
 col_a,col_c
ORDER BY 
 col_b

现在,当查询的输出是X行时,rows_in_result会准确地反映这一点.

> PARTITION BY 1是什么意思?

>我认为它可能告诉数据库将结果分成每行1行

解决方法

这是PARTITION BY的一个不寻常的用法.它的作用是将所有内容放在同一个分区中,这样如果查询一共返回123行,那么每行的rows_in_result值将为123(如别名所示).

因此它相当于更简洁:

COUNT(*) OVER ()

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注