GROUP BY子句中的ORDER BY

Nir*_*bey 1 sql oracle plsql

我有一个问题

 Select
 (SELECT id FROM xyz M  WHEREM.ID=G.ID AND ROWNUM=1 ) TOTAL_X,
count(*) from mno G where col1='M' group by col2  
Run Code Online (Sandbox Code Playgroud)

现在从子查询我必须为此获取ramdom id

     Select
 (SELECT id FROM xyz M  WHEREM.ID=G.ID AND ROWNUM=1 order by dbms_random.value ) TOTAL_X,
count(*) from mno G where col1='M' group by col2 
Run Code Online (Sandbox Code Playgroud)

但是,oracle显示错误

"Missing right parenthesis".
Run Code Online (Sandbox Code Playgroud)

查询有什么问题,我怎么能得到这个查询来获得随机ID.请帮忙.

Dav*_*sta 5

即使你所做的是合法的,它也不会给你你想要的结果.ROWNUM过滤器将在ORDER BY之前应用,因此您只需对一行进行排序.

你需要这样的东西.我不确定这个确切的代码是否适用于相关的子查询,但基本的一点是你需要有一个子查询包含没有ROWNUM过滤器的ORDER BY,然后将ROWNUM过滤器应用一级.

WITH subq AS (
  SELECT id FROM xyz M  WHERE M.ID=G.ID order by dbms_random.value
)
SELECT (SELECT id FROM subq WHERE rownum = 1) total_x,
       count(*)
from mno g where col1='M' group by col2
Run Code Online (Sandbox Code Playgroud)