2012-04-26 55 views
0

工作,我从MySQL查询:Biased random in SQL?但遗憾的是没有与PostgreSQL的工作:Modyfing 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()函数不存在。任何人都可以帮我做这个查询吗?

非常感谢!

+0

NEWID()不是一个MySQL的函数或者。 – 2012-04-26 12:40:22

回答

0

PostgreSQL不支持等效于Microsoft SQL Server的功能newid()

你必须执行,如果你想要的。

一个很好的实现可以发现HERE

您还可以使用uuid-ossp Module,不过我没试过。

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,你需要于contrib文件夹中运行该脚本uuid-ossp.sql(这是你的PostgreSQL安装的一部分)