Группа По значению RAND()

Можно получить случайное значение группы через?

----------------
 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

Ответ 1

Вы можете использовать команду rand() затем группируйте их.

Как

  SELECT nID, VAL FROM (
  SELECT nID, VAL
  FROM T1
  ORDER BY RAND()
  )AS subquery
GROUP BY nID

Ответ 2

Использовать подзапрос.

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

http://sqlfiddle.com/#!2/357b8/18

Ответ 3

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 ; 

Ответ 4

Попробуйте это

SELECT nID, VAL
FROM (select nID, VAL from T1 order by rand()) as T
group by nID

Ответ 5

Следующее решение по духу аналогично решению 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