【问题标题】:Modyfing MySQL query to work with PostgreSQL修改 MySQL 查询以使用 PostgreSQL
【发布时间】:2012-04-26 12:17:07
【问题描述】:

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

非常感谢!

【问题讨论】:

  • newid() 也不是 MySQL 函数。

标签: mysql postgresql


【解决方案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 文件夹(这是 PostgreSQL 安装的一部分)运行脚本 uuid-ossp.sql

【讨论】:

    【解决方案2】:

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

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

    可以找到一个很好的实现HERE

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2013-02-21
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多