0

我从以下位置获取 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() 函数不存在。任何人都可以帮助我修改这个查询吗?

非常感谢!

4

2 回答 2

1

目前尚不清楚您是指 MySQL(它没有newid()函数)还是 SQL Server(它有一个newid()函数并且也是您链接到的答案中的目标)。

在 Postgres 中生成 UUID 的标准方法是安装 UUID contrib 模块,然后使用提供的函数之一来生成 UUID:

http://www.postgresql.org/docs/current/static/uuid-ossp.html

该模块是通过create extension "uuid-ossp"以超级用户(通常是 postgres)连接时运行来安装的。

如果您使用的是旧版本的 PostgreSQL,则需要uuid-ossp.sql从 contrib 文件夹(这是 PostgreSQL 安装的一部分)运行脚本

于 2012-04-26T12:46:54.993 回答
0

PostgreSQL 不支持与 Microsoft SQL Server 函数等效的函数newid()

如果你愿意,你必须实施。

一个好的实现可以在这里找到

您也可以使用 uuid-ossp 模块,但我从未尝试过。

于 2012-04-26T12:23:44.033 回答