PostgreSQL中SQL Server FIRST()聚合函数的等效替代方案
编辑注:问题答案为使用MIN函数,该函数对字符串和数值类型均生效,感谢用户@cadet提供的方案。
原始问题
查阅同类问题解答近半小时仍无法理解现有回复内容,需要简单清晰、易于理解的明确解答。
在SQL Server中执行聚合查询时,可通过如下语句返回分组后field2字段的首个值:
SELECT field1, first(field2) FROM table GROUP BY field1;
需要确认该写法在PostgreSQL中的等效实现方式。此前了解到DISTINCT ON是相关适用语法,因此尝试编写如下语句:
Select field1, DISTINCT ON(field2) from table group by field1
执行时出现语法错误,不确定写法是否正确。
补充报错信息
PostgreSQL环境下直接调用FIRST函数会返回函数不存在的报错,具体信息如下:
ERROR: function first(asset32type) does not exist LINE 1: Select policy, first (name) from multi_asset group by policy... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SQL state: 42883 Character: 16
需求说明
SQL Server中first()聚合函数的逻辑为:分组聚合时返回分组内field2字段的首个值。
测试数据如下:
| field1 | field2 |
|---|---|
| Tom | 32 |
| Tom | 53 |
执行select field1, first(field2) group by field1语句后,返回结果为Tom, 32,即提取对应分组下field2字段的第一个值。
解答
直接使用MIN()聚合函数即可实现等效效果,该函数对字符串、数值类型字段均生效。针对上述测试场景的写法如下:
SELECT field1, MIN(field2) FROM table GROUP BY field1;
该语句执行后返回的结果与SQL Server中first()函数的预期返回结果一致。
内容的提问来源于stack exchange,提问作者Reddspark
相关产品推荐
相关产品推荐

