2012-04-26 82 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安裝的一部分)