加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 为每个组选择随机行

发布时间:2021-02-23 20:10:47 所属栏目:编程 来源:网络整理
导读:我有一张这样的桌子 ID ATTRIBUTE 1 A 1 A 1 B 1 C 2 B 2 C 2 C 3 A 3 B 3 C 我想为每个ID选择一个随机属性.结果因此看起来像这样(虽然这只是众多选择之一 ATTRIBUTEBCC 这是我对这个问题的尝试 SELECT "ATTRIBUTE"FROM ( SELECT "ID","ATTRIBUTE",row_number

我有一张这样的桌子

ID    ATTRIBUTE
 1    A
 1    A
 1    B
 1    C
 2    B
 2    C
 2    C
 3    A
 3    B
 3    C

我想为每个ID选择一个随机属性.结果因此看起来像这样(虽然这只是众多选择之一

ATTRIBUTE
B
C
C

这是我对这个问题的尝试

SELECT
  "ATTRIBUTE"
FROM
  (
  SELECT
    "ID","ATTRIBUTE",row_number() OVER (PARTITION BY "ID" ORDER BY random()) rownum
  FROM
    table
  ) shuffled
WHERE
  rownum = 1

但是,我不知道这是否是一个很好的解决方案,因为我需要引入行号,这有点麻烦.

你有更好的吗?

解决方法

select distinct on (id) id,attribute
from like_this
order by id,random()

如果您只需要属性列:

select distinct on (id) attribute
from like_this
order by id,random()

请注意,您仍然需要首先按id排序,因为它是distinct的列.

如果您只想要不同的属性:

select distinct attribute
from (
    select distinct on (id) attribute
    from like_this
    order by id,random()
) s

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读