Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-00937:使用rownum时没有单个组函数_Sql_Oracle - Fatal编程技术网

Sql ORA-00937:使用rownum时没有单个组函数

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 ,',

触发以下查询时,我收到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 ,',') 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;