Sql ORA-00937:使用rownum时没有单个组函数
触发以下查询时,我收到ORA-00937错误 查询: 这是您的查询:Sql ORA-00937:使用rownum时没有单个组函数,sql,oracle,Sql,Oracle,触发以下查询时,我收到ORA-00937错误 查询: 这是您的查询: select * from (select t.*, rownum as r from (select streetid, roadid, LISTAGG(longitude ,',') WITHIN GROUP (ORDER BY sequence_number) as long_agg , LISTAGG(latitude ,',
select *
from (select t.*, rownum as r
from (select streetid, roadid,
LISTAGG(longitude ,',') WITHIN GROUP (ORDER BY sequence_number) as long_agg ,
LISTAGG(latitude ,',') WITHIN GROUP (ORDER BY sequence_number) as lat_agg
from linkstable
where areaid = 100
) t
) t
where r > 100 and r < 200;
这是您的查询:
select *
from (select t.*, rownum as r
from (select streetid, roadid,
LISTAGG(longitude ,',') WITHIN GROUP (ORDER BY sequence_number) as long_agg ,
LISTAGG(latitude ,',') WITHIN GROUP (ORDER BY sequence_number) as lat_agg
from linkstable
where areaid = 100
) t
) t
where r > 100 and r < 200;
从Gordon的解决方案扩展到使用rownum的解决方案
WITH street_list as
(
SELECT streetid,
roadid,
LISTAGG(longitude ,',') WITHIN GROUP ( ORDER BY sequence_number) long_agg ,
LISTAGG(latitude ,',') WITHIN GROUP ( ORDER BY sequence_number) lat_agg ,
FROM linkstable
WHERE areaid = 100
group by strretid,roadid
),
street_list_numbered as
(
SELECT rownum r,streetid,roadid, long_agg,lat_agg
FROM street_list
)
SELECT * FROM street_list_numbered
WHERE r > 100 and r < 200;
从Gordon的解决方案扩展到使用rownum的解决方案
WITH street_list as
(
SELECT streetid,
roadid,
LISTAGG(longitude ,',') WITHIN GROUP ( ORDER BY sequence_number) long_agg ,
LISTAGG(latitude ,',') WITHIN GROUP ( ORDER BY sequence_number) lat_agg ,
FROM linkstable
WHERE areaid = 100
group by strretid,roadid
),
street_list_numbered as
(
SELECT rownum r,streetid,roadid, long_agg,lat_agg
FROM street_list
)
SELECT * FROM street_list_numbered
WHERE r > 100 and r < 200;
不仅如此,子查询还需要一个别名。@DanBracuk。Oracle不要求子查询使用别名。谁知道呢?显然,除了我之外,其他人都是。@GordonLinoff:是的,我错过了在里面添加一组。我不明白你的意思。现在,我确保将聚合与GROUPBY一起使用。还是找不到预感。@Vignesh。这让我感到惊讶。我用甲骨文已经很久很久了。我想我以前从未按查询将rownum放入组中;它确实产生了一个错误。解决方法很简单,只需添加一个子查询或使用row_number函数即可。顺便说一下,您应该始终包含order By,因为每个查询运行的结果可能不同。不仅如此,子查询还需要别名。@DanBracuk。Oracle不要求子查询使用别名。谁知道呢?显然,除了我之外,其他人都是。@GordonLinoff:是的,我错过了在里面添加一组。我不明白你的意思。现在,我确保将聚合与GROUPBY一起使用。还是找不到预感。@Vignesh。这让我感到惊讶。我用甲骨文已经很久很久了。我想我以前从未按查询将rownum放入组中;它确实产生了一个错误。解决方法很简单,只需添加一个子查询或使用row_number函数即可。顺便说一下,您应该始终包含order By,因为每次查询的结果可能不同。Thank you@OracleUser and GordonLinoff:Thank you@OracleUser and GordonLinoff:
WITH street_list as
(
SELECT streetid,
roadid,
LISTAGG(longitude ,',') WITHIN GROUP ( ORDER BY sequence_number) long_agg ,
LISTAGG(latitude ,',') WITHIN GROUP ( ORDER BY sequence_number) lat_agg ,
FROM linkstable
WHERE areaid = 100
group by strretid,roadid
),
street_list_numbered as
(
SELECT rownum r,streetid,roadid, long_agg,lat_agg
FROM street_list
)
SELECT * FROM street_list_numbered
WHERE r > 100 and r < 200;