如何避免 postgres 查询中这种重复的 CASE WHEN 模式?

问题描述 投票:0回答:1

我有一个 postgres 查询,它根据一个条件验证列是否为空,这是一个不需要函数的正常查询,可能会过度使用函数方法,因为这是集合中的独特场景。

查询按预期工作,但如果可能的话我想缩小逻辑。

CASE WHEN LOWER(COALESCE(users.user_number, users.customer_number)) LIKE 'vip%' THEN NULL
    ELSE COALESCE(users.user_badge, users.customer_badge) END                              AS normal_badge,
CASE WHEN LOWER(COALESCE(users.user_number, users.customer_number)) LIKE 'vip%' THEN NULL
    ELSE users.expiration_date END                                                         AS expiration_date,
CASE WHEN LOWER(COALESCE(users.user_number, users.customer_number)) LIKE 'vip%' THEN NULL
    ELSE COALESCE(users.user_number, users.customer_number) END                            AS standard_user,
sql postgresql case
1个回答
0
投票

使用 CTE 尝试此操作:

WITH user_data AS (
    SELECT *,
           LOWER(COALESCE(user_number, customer_number)) AS lower_number
    FROM users
)
SELECT 
    CASE WHEN lower_number LIKE 'vip%' THEN NULL
         ELSE COALESCE(user_badge, customer_badge) 
    END AS normal_badge,
    CASE WHEN lower_number LIKE 'vip%' THEN NULL
         ELSE expiration_date 
    END AS expiration_date,
    CASE WHEN lower_number LIKE 'vip%' THEN NULL
         ELSE COALESCE(user_number, customer_number) 
    END AS coalesced_number
FROM user_data;

© www.soinside.com 2019 - 2024. All rights reserved.