Ответ 1
Вы можете использовать команду rand() затем группируйте их.
Как
SELECT nID, VAL FROM (
SELECT nID, VAL
FROM T1
ORDER BY RAND()
)AS subquery
GROUP BY nID
Можно получить случайное значение группы через?
----------------
nID | val
---------------
A | XXX
A | YYY
B | L
B | M
B | N
B | P
----------------
С помощью этого SQL:
SELECT nID, VAL FROM T1 GROUP BY nID
Мой результат всегда:
nID val
--------
A XXX
B L
Но я хочу другой результат evey nID. Как:
nID val
--------
A YYY
B N
или
nID val
--------
A XXX
B P
Это возможно?
http://sqlfiddle.com/#!2/357b8/3
Вы можете использовать команду rand() затем группируйте их.
Как
SELECT nID, VAL FROM (
SELECT nID, VAL
FROM T1
ORDER BY RAND()
)AS subquery
GROUP BY nID
Использовать подзапрос.
SELECT r.nID,
(SELECT r1.val FROM T1 r1 WHERE r.nID=r1.nID ORDER BY rand() LIMIT 1) AS 'val' FROM T1 r
GROUP BY r.nID
SELECT
t1.nID,
(SELECT
t2.var
FROM your_table t2
WHERE t1.nID = t2.nID ORDER BY rand() LIMIT 1
) AS var
FROM your_table t1
GROUP BY t1.nID ;
Попробуйте это
SELECT nID, VAL
FROM (select nID, VAL from T1 order by rand()) as T
group by nID
Следующее решение по духу аналогично решению xdazz или jonnyynnoj. Но вместо SELECT FROM T1 GROUP BY nID
я использую подзапрос, чтобы выбрать все отдельные идентификаторы. Я считаю, что есть вероятность, что производительность может отличаться, поэтому попробуйте также попробовать.
SELECT nID,
(SELECT VAL
FROM T1
WHERE T1.nID = ids.nID
ORDER BY RAND()
LIMIT 1
) AS VAL
FROM (SELECT DISTINCT nID FROM T1) AS ids