修改MySQL查询以使用PostgreSQL

时间:2012-04-26 12:17:07

标签: mysql postgresql

我从Biased random in SQL?获得MySQL查询,但遗憾的是它无法与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()函数不存在。有人可以帮我解决这个疑问吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

目前尚不清楚您是否引用了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"来安装模块。

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

答案 1 :(得分:0)

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

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

可以找到一个好的实现HERE

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