Как запрос может возвращать только одну случайную строку для каждого отдельного столбца?

У меня есть таблица с двумя столбцами, скажем, столбец1 и столбец2. Столбец2 не уникален. Для каждого отдельного значения столбца2 мне нужна случайная строка, только одна строка из таблицы?

то есть мой набор результатов должен иметь столько строк, сколько различных значений столбца2.

eg:

column1   column2
x         1
y         2
z         1

Я хочу, чтобы результат был

column1   column2
x         1
y         2

or

column1   column2
z         1
y         2

Возможно ли это, используя только SQL?


person Abdulsattar Mohammed    schedule 21.06.2009    source источник


Ответы (3)


Этот запрос должен помочь с MySQL (проверено на MySQL 5):

select a.column1, a.column2 from (select * from foo b order by rand()) a group by a.column2;
person tom    schedule 22.06.2009

Вы можете попробовать что-то вроде ROW_NUMBER() OVER(ORDER BY column1 asc), чтобы получить номера строк и отфильтровать их таким образом.

Вы не упомянули, какую разновидность SQL вы используете, и я вспоминаю это по памяти, но такие вещи работают в Oracle 9.

person pierre    schedule 21.06.2009

person    schedule
comment
У меня не работает. Я считаю, что должен быть более сложный, но лучший способ добиться этого. - person Matias; 21.06.2009
comment
Я хочу случайный ряд. Я думаю, что MAX (column1), column2 всегда возвращает определенную строку. - person Abdulsattar Mohammed; 21.06.2009
comment
Хм, вы имеете в виду, что иногда он должен возвращать (x, 1), а иногда (z, 1) - person jitter; 21.06.2009