11

有可能得到组的随机值吗?

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

但我想要每个 nID 的不同结果。喜欢:

nID  val
--------
A    YYY
B    N

或者

nID  val
--------
A    XXX
B    P

这是可能的?

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

4

5 回答 5

3

使用子查询。

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

于 2012-10-04T10:40:36.993 回答
3

您可以按 rand() 使用 order,然后按它们分组。

喜欢

  SELECT nID, VAL FROM (
  SELECT nID, VAL
  FROM T1
  ORDER BY RAND()
  )AS subquery
GROUP BY nID
于 2012-10-04T10:43:20.050 回答
1
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 ; 
于 2012-10-04T10:40:55.813 回答
0

尝试这个

SELECT nID, VAL
FROM (select nID, VAL from T1 order by rand()) as T
group by nID
于 2012-10-04T10:50:08.730 回答
0

以下解决方案在精神上与xdazzjonnyynnoj中的解决方案相似。但SELECT FROM T1 GROUP BY nID我没有使用子查询来选择所有不同的 ID。我相信性能可能会有所不同,所以也试试这个。

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
于 2012-10-05T08:42:00.453 回答