spe*_*ndo 7 sql random postgresql group-by window-functions
我有一张这样的桌子
ID ATTRIBUTE
1 A
1 A
1 B
1 C
2 B
2 C
2 C
3 A
3 B
3 C
Run Code Online (Sandbox Code Playgroud)
我想为每个ID 选择一个随机属性.结果因此看起来像这样(虽然这只是众多选择之一
ATTRIBUTE
B
C
C
Run Code Online (Sandbox Code Playgroud)
这是我对这个问题的尝试
SELECT
"ATTRIBUTE"
FROM
(
SELECT
"ID",
"ATTRIBUTE",
row_number() OVER (PARTITION BY "ID" ORDER BY random()) rownum
FROM
table
) shuffled
WHERE
rownum = 1
Run Code Online (Sandbox Code Playgroud)
但是,我不知道这是否是一个很好的解决方案,因为我需要引入行号,这有点麻烦.
你有更好的吗?
Clo*_*eto 15
select distinct on (id) id, attribute
from like_this
order by id, random()
Run Code Online (Sandbox Code Playgroud)
如果您只需要属性列:
select distinct on (id) attribute
from like_this
order by id, random()
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然需要先订购,id因为它是一列distinct on.
如果您只想要不同的属性:
select distinct attribute
from (
select distinct on (id) attribute
from like_this
order by id, random()
) s
Run Code Online (Sandbox Code Playgroud)