1

、、mytableの 3 つの列を持つ、便利な と呼ばれる 1 つの大きなテーブルがあります。SQLを使用して、それぞれからランダムな要素を選択したいと思います。どうすればいいですか?idcat_groupcat_othercat_group

サンプルデータ

| id | cat_group | cat_other |
+----+-----------+-----------+
|  1 | red       | fred      |
|  2 | blue      | sarah     |
|  3 | blue      | peter     |
|  4 | green     | spot      |
|  5 | red       | peter     |

許容できる結果

| cat_group | id | cat_other |
+-----------+----+-----------+
| red       |  5 | peter     |
| blue      |  2 | sarah     |
| green     |  4 | spot      |

また良い

| cat_group | id | cat_other |
+-----------+----+-----------+
| red       |  1 | fred      |
| blue      |  3 | peter     |
| green     |  4 | spot      |

SO に関する同様の質問をいくつか見たことがありますが、実装の詳細に迷っています。私はpostgresqlを使用していますが、答えは異なるデータベース間で一般化できるはずです。

Sqlfiddle のhttp://sqlfiddle.com/#!1/b42c8/2

4

1 に答える 1

4

を使用した 1 つの方法を次に示しますrow_number()

select cat_group, id, cat_other
from (select mytable.*,
             row_number() over (partition by cat_group order by random()) as seqnum
      from mytable
     ) as t
where seqnum = 1

同じ考え方が他のデータベースでも機能します。ただし、乱数関数は異なる場合があります。たとえば、SQL Server では、rand()行ごとではなく、クエリごとに 1 つの値のみが返されます。を使用しますnewid()

于 2013-03-22T15:40:28.623 に答える