【问题标题】:Partition Function Count() over分区函数 Count() 结束
【发布时间】:2017-05-26 07:51:31
【问题描述】:
我正在尝试编写以下内容以获得 WO_Count 的运行总数,如下所示:
我必须保持像 WO_Count > 1 这样的条件。有人可以帮我吗?如果我保持 WO_Count > 1 的位置,则会出现以下错误:
ORA-00904:“WO_COUNT”:标识符无效
00904. 00000 - "%s: 无效标识符"
select
Test1.id_number as Case_ID,
count(*) over ( partition by Tes2.NAME ) as WO_Count
FROM Test1
INNER JOIN Test2 ON Test1.Test12Test2=Test2.ID
【问题讨论】:
标签:
sql
oracle
count
partition
【解决方案1】:
您需要使用派生表或公用表表达式嵌套查询:
select *
from
(
select
Test1.id_number as Case_ID,
count(*) over ( partition by Tes2.NAME ) as WO_Count
FROM Test1
INNER JOIN Test2 ON Test1.Test12Test2=Test2.ID
) dt
WHERE WO_Count > 1
顺便说一句,您的计数不会返回运行总数,而是组计数。
【解决方案2】:
要获得运行计数,您可以使用ROW_NUMBER() 分析函数:
SELECT t1.id_number as Case_ID,
ROW_NUMBER() OVER (
PARTITION BY t2.NAME
ORDER BY ROWNUM /* or a column name */
) as WO_Count
FROM Test1 t1
INNER JOIN Test2 t2
ON ( t1.Test12Test2 = t2.ID )
(注意:您也可以使用COUNT(*) OVER ( PARTITION BY ... ORDER BY ... ) 来获取运行计数,但是当您计算行数时,使用*,它们是等效的。)
如果你想要第一行之后的所有行,那么:
SELECT *
FROM (
SELECT t1.id_number as Case_ID,
ROW_NUMBER() OVER (
PARTITION BY t2.NAME
ORDER BY ROWNUM /* or a column name */
) as WO_Count
FROM Test1 t1
INNER JOIN Test2 t2
ON ( t1.Test12Test2 = t2.ID )
)
WHERE WO_Count > 1