1、pgsql的group by 要求列出select 中所有没有被聚合的非聚合字段,sqlserver也有这样的要求,对于更灵活的mysql来说,不一定要把select 中所有没有被聚合的非聚合字段列出。
2、pgsql不支持any_value函数,对于分组有较严格的语法规范,如果实在想要实现any_value函数的效果,可以先添加一个子查询,然后在子查询中使用窗口函数ROW_NUMBER() 对每个分组排序,假设我想要根据名字分组查询用户的电话和地址,示例sql如下:
SELECT u.name, u.phone_number, u.address
FROM (
SELECT name, phone_number, address,
ROW_NUMBER() OVER(PARTITION BY name ORDER BY name) AS rn
FROM users
) AS u
WHERE u.rn = 1
3、MySQL 允许用户定义和使用会话变量,例如 @var := value 这种形式,而 PostgreSQL 不直接支持此类会话级别的变量