postgre如何在SQL中使用列进行文本计算



我想在SQL查询中有条件地包含特定列的值。为了说明这个问题,让我举一个虚构的例子,返回关于用户的选择性数据。

如果我们要返回所有数据,我们会使用以下形式的查询:

SELECT 
name, email, gender 
FROM 
users

假设所有用户都输入了自己的性别。然而,有些人将gender_public的值设置为false,我希望在查询返回的数据中反映这一点。

我想做的事情是:

SELECT 
name, email, if(gender_public, gender, 'N/A')
FROM 
users

这可能吗?我在Postgres 工作

使用CASE

正如@a_house_with_no_name所建议的那样,这是显而易见的方法。

假设gender_public的类型为BOOLEAN。

SELECT name, email, CASE WHEN gender_public THEN gender ELSE 'N/A' END AS gender
FROM users;

使用横向连接

如果您需要在多个地方使用该值并希望保持一致,那么这种方法尤其有用。

SELECT name, email, T.gender
FROM users
CROSS JOIN LATERAL (
SELECT gender WHERE show_gender
UNION
SELECT 'N/A' WHERE NOT(show_gender)
) T(gender)

最新更新