我从以下位置获取MySQL查询: SQL中的偏随机?但不幸的是,它不适用于PostgreSQL:
DECLARE @sample TABLE (id int, boost int)
INSERT @sample VALUES (1, 1), (2, 2), (3, 7)
SELECT
RAND(CHECKSUM(NEWID())) * boost AS weighted,
SUM(boost) OVER () AS boostcount,
id
FROM
@sample
GROUP BY
id, boost
ORDER BY
weighted DESC
它说 NEWID() 函数不存在。有人可以帮助我修改这个查询吗?
非常感谢!
还不清楚你指的是MySQL(它没有newid()
函数)还是SQL Server(它确实有一个newid()
函数,并且在你链接到的答案中也是目标)。
在 Postgres 中生成 UUID 的标准方法是安装 UUID contrib 模块,然后使用提供的函数之一生成 UUID:
http://www.postgresql.org/docs/current/static/uuid-ossp.html
该模块是通过在以超级用户(通常是 postgres)身份连接时运行 create extension "uuid-ossp"
来安装的。
则需要从contrib文件夹(这是PostgreSQL安装的一部分)运行脚本uuid-ossp.sql
PostgreSQL不支持等效的Microsoft SQL Server函数newid()
如果你愿意,你必须实现。
一个好的实现可以在这里找到
你也可以使用 uuid-ossp 模块,但我从未尝试过。