Вы не можете использовать заказ в под-выборе.Это тоже не имеет значения, потому что сначала применяется нумерация строк, поэтому вы не можете повлиять на нее, используя порядок по,
[edit]
Попробовал решение.У меня нет Oracle, так что вам придется читать между опечатками.В этом случае я генерирую одно случайное значение, получаю количество записей в xyz на mno.id и генерирую последовательность для этих записей на mno.id.
Затем на более высоком уровне я фильтрую толькоте записи, индекс которых совпадает со случайным значением.Это должно дать вам случайный идентификатор из xyz, который совпадает с идентификатором в mno.
select
x.mnoId,
x.TOTAL_X
from
(SELECT
g.id as mnoId,
m.id as TOTAL_X,
count(*) over (partition by g.id) as MCOUNT,
dense_rank() over (partition by g.id) as MINDEX,
r.RandomValue
from
mno g
inner join xyz m on m.id = g.id
cross join (select dbms_random.value as RandomValue from dual) r
where
g.col1 = 'M'
) x
where
x.MINDEX = 1 + trunc(x.MCOUNT * x.RandomValue)