¿Cómo puede una consulta devolver solo una fila aleatoria para cada columna distinta?
-
06-07-2019 - |
Pregunta
Tengo una tabla con dos columnas, por ejemplo, column1 y column2. Column2 no es único. Para cada valor distinto de column2, ¿quiero una fila aleatoria, solo una fila, de la tabla?
es decir mi conjunto de resultados debe tener tantas filas como el número de valores distintos de column2.
por ejemplo:
column1 column2
x 1
y 2
z 1
Quiero que el resultado sea
column1 column2
x 1
y 2
o
column1 column2
z 1
y 2
¿Es esto posible usando solo SQL?
Solución
Esta consulta debería hacer el truco en MySQL (probado en MySQL 5):
select a.column1, a.column2 from (select * from foo b order by rand()) a group by a.column2;
Otros consejos
SELECT MAX (column1), column2 FROM yourtablename GROUP BY column2
Es posible que desee probar algo como ROW_NUMBER () OVER (ORDER BY column1 asc)
para retirar los números de fila y filtrarlos de esa manera.
No mencionaste qué sabor de SQL usas y lo recuerdo de memoria, pero este tipo de cosas funciona en Oracle 9.