首页 > 数据库 > mysql教程 > 为什么我的 MySQL GROUP BY 查询在 PostgreSQL 中失败?

为什么我的 MySQL GROUP BY 查询在 PostgreSQL 中失败?

Barbara Streisand
发布: 2025-01-11 07:36:43
原创
166 人浏览过

Why Does My MySQL GROUP BY Query Fail in PostgreSQL?

PostgreSQL 和 MySQL:GROUP BY 子句比较

将 MySQL 查询迁移到 PostgreSQL 可能会导致错误“列 'XYZ' 必须出现在 GROUP BY 子句中或在聚合函数中使用”。这种差异源于这些数据库处理 GROUP BY 子句的方式。

MySQL 的非标准方法

MySQL 的 GROUP BY 实现偏离了 SQL 标准。 它允许选择 GROUP BY 子句中未明确列出的列,从而导致不可预测的输出。 从每组中选择的行是隐式确定的,受索引和查询优化等因素的影响。

PostgreSQL 符合标准GROUP BY

然而,PostgreSQL 严格遵守 SQL 标准。 SELECT 列表中的所有列必须包含在 GROUP BY 子句中或者是聚合函数的一部分(如 SUMAVGCOUNT)。 否则会出现上述错误。

在 PostgreSQL 中复制 MySQL 的行为

虽然 PostgreSQL 的方法更具可预测性且符合标准,但您可以使用 DISTINCT ON 模拟 MySQL 的非标准行为。以下 PostgreSQL 查询演示了这一点:

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate)
availables.*,
rooms.hotel_id
FROM availables
INNER JOIN rooms ON rooms.id = availables.room_id
WHERE rooms.hotel_id = 5056
AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24'
ORDER BY availables.updated_at;</code>
登录后复制

DISTINCT ONavailables.bookdate 中的每个不同值返回一行,保持 ORDER BY 子句指定的行顺序。 这有效地模仿了 MySQL 在这个特定场景中的非标准 GROUP BY 行为。 请注意,此方法依赖于 ORDER BY 子句来定义为每个不同组选择哪一行。

以上是为什么我的 MySQL GROUP BY 查询在 PostgreSQL 中失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板