根据列索引获取随机行

时间:2013-11-18 21:53:08

标签: sql postgresql

截至目前,表格设置如下:

CREATE TABLE testing (
    id INT NOT NULL,
    text TEXT NOT NULL
);

CREATE TABLE users (
    id INT NOT NULL,
    name VARCHAR(32) NOT NULL
) UNIQUE KEY (id);

这基本上存储了人们的引用,而我想要做的是对每个查询都有一个随机引用。截至目前,我可以通过以下方式将其最小化为选择单个用户和报价:

SELECT name, MIN(text)
FROM testing
INNER JOIN users
ON users.id = testing.id
GROUP BY name

但是,如果有多个,则每次都不会选择随机文本。如何在不重复行的情况下每次支持另外一个?

1 个答案:

答案 0 :(得分:2)

您可以使用row_number()random()函数执行此操作:

select name, text
from (SELECT name, text, row_number() over (partition by name order by random()) as seqnum
      FROM testing t INNER JOIN
           users u
           ON u.id = t.id
      ) t
where seqnum = 1;