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

order by rand() を使用してからグループ化できます。

お気に入り

  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

次の解決策は、 xdazzまたはjonnyynnojの解決策と精神的に似ています。ただし、代わりに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 に答える