在Presto中,有一个arbitrary()
聚合函数可以选择给定组中的任意行。如果没有group by
子句,那么我可以使用distinct on
。对于group by
,每个选定的列都必须位于group by
中或是聚合列。例如:
| id | foo |
| 1 | 123 |
| 1 | 321 |
select id, arbitrary(foo), count(*)
from mytable
group by id
Fiddle
返回1, 123, 2
还是1, 321, 2
并不重要。像min()
或max()
这样的东西可以工作,但速度要慢得多。
Postgres中是否存在类似arbitrary()
的内容?
select m.foo,b.id,b.cnt from mytable m
join (select id, count(*) cnt
from mytable
group by id) b using (id) limit 1;
如果没有明确提到asc
、desc
的所有订单都不保证。因此,在上面的查询中,foo的外观是任意的。