我可以在 CASE 语句 PostgreSQL 中使用 'alias' AS

Can i use 'alias' AS in CASE Statement PostgreSQL

SELECT 
    id
    , quantity
    , unit_price 
    , (antity * unit_price) as price    
CASE
    WHEN quantity * unit_price > 5000 THEN (quantity * unit_price) * 0.2
    WHEN quantity * unit_price > 3000 THEN (quantity * unit_price) * 0.15 
    ELSE null 
END 

AS discount

FROM OrderDetails;

我尝试在 CASE 中使用别名 price 但它不起作用。 在上面的代码中,我重复了 5 次 quantity * unit_price。 是否存在更好的方法来实现此代码? CASE语句有没有办法避免重复?

你可以使用 CTE

WITH CTE as (
SELECT 
    id
    , quantity
    , unit_price,
    (antity * unit_price) as price
FROM OrderDetails
)
SELECT 
    id
    , quantity
    , unit_price 
    , price    
CASE
    WHEN price > 5000 THEN price * 0.2
    WHEN price > 3000 THEN price * 0.15 
    ELSE null 
END 

AS discount

FROM OrderDetails;