从雪花中的 Postgres 复制 FILTER 子句

Posted

技术标签:

【中文标题】从雪花中的 Postgres 复制 FILTER 子句【英文标题】:Replicating FILTER clause from Postgres in Snowflake 【发布时间】:2020-03-15 06:40:25 【问题描述】:

Postgres 有一个非常有用的方法,称为 FILTER,它似乎不在 Snowflake 中。在 Postgres 中它是这样工作的:

SELECT
  user_id,
  MIN(orders.started_at) FILTER (WHERE orders.sequence_in_subscription = 1) as time_of_t1
FROM platform.orders
GROUP BY 1

你会如何在 Snowflake 中做到这一点?有这么简洁的方法吗?

可能是一个相当基本的问题,但我对 Snowflake 世界还很陌生,之前只真正做过 Postgres。提前感谢您的帮助!

【问题讨论】:

还有IFF,一种写case语句的更短的方式。以 ***.com/a/55716546/1335793 为例查看其他问题 【参考方案1】:

是的,您可以使用CASE 表达式代替FILTER 子句:

SELECT
    user_id,
    MIN(CASE WHEN orders.sequence_in_subscription = 1 THEN orders.started_at END) AS time_of_t1
FROM platform.orders
GROUP BY
    user_id;

【讨论】:

好的,非常感谢!我认为可能有更简洁的方法,但这会奏效。感谢您的帮助

以上是关于从雪花中的 Postgres 复制 FILTER 子句的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Postgres Hstore 数据类型转换为雪花对象或变体

从函数中的 postgres 执行复制命令并创建文件

我如何从多个表中复制到?雪花

从 JSON 复制雪花 - ON_ERROR = CONTINUE - 奇怪的问题

从 AWS S3 复制到雪花,同时包含函数

雪花“PARTITION BY”复制选项,包括输出数据集中的分区列