我有一个方便地称为mytable
的大表,有三列:id
,cat_group
,cat_other
。我想使用SQL从每个cat_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答案 0 :(得分:4)
以下是一种使用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()
每个查询只返回一个值 - 而不是每行。你会使用newid()
。