首页 > 数据库 > mysql教程 > PostgreSQL vs. MySQL GROUP BY:如何在 PostgreSQL 中实现 MySQL 的分组行为?

PostgreSQL vs. MySQL GROUP BY:如何在 PostgreSQL 中实现 MySQL 的分组行为?

Patricia Arquette
发布: 2025-01-11 08:24:42
原创
769 人浏览过

PostgreSQL vs. MySQL GROUP BY: How to Achieve MySQL's Grouping Behavior in PostgreSQL?

PostgreSQL与MySQL的GROUP BY差异

MySQL和PostgreSQL的GROUP BY语法存在差异,这常常导致错误,例如“列X必须出现在GROUP BY子句中”。

MySQL的GROUP BY行为

在MySQL中,以下查询将为bookdate列中的每个唯一值返回一行:

<code class="language-sql">SELECT `availables`.*
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')
GROUP BY availables.bookdate
ORDER BY availables.updated_at</code>
登录后复制

PostgreSQL的GROUP BY要求

然而,在PostgreSQL中,未明确包含在GROUP BY子句中或未用于聚合函数的列必须是主键的一部分。在上面的查询中,availables.id既未包含在GROUP BY中,也未用于聚合,因此导致错误。

模拟MySQL的行为

为了在PostgreSQL中模拟MySQL的GROUP BY行为,可以使用DISTINCT ON代替GROUP BY:

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate) availables.*
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.bookdate, availables.updated_at</code>
登录后复制

DISTINCT ON确保指定列的唯一性,同时保留ORDER BY子句中指定的顺序。此语法模拟了MySQL按bookdate列唯一值返回单行记录的能力。

以上是PostgreSQL vs. MySQL GROUP BY:如何在 PostgreSQL 中实现 MySQL 的分组行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

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