gpt4 book ai didi

Postgresql CASE 语句 - 我可以在我的 SELECT 中使用 CASE 的返回值吗?

转载 作者:行者123 更新时间:2023-11-29 11:14:45 24 4
gpt4 key购买 nike

我有一个包含多个表的产品数据库来存储定价(因为默认定价和可选的每种产品颜色的覆盖定价),并且我在查询中有 CASE 语句来获取* 产品原价* 产品的销售价格,如果它正在销售

如果产品打折,我还需要计算该产品的 DISCOUNT。在我尝试此操作之前,请查看我现有的有效 SQL 的分割。

SELECT  p.productid, p.stylename,
CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.original_price ELSE pp.original_price END AS final_original_price,
CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.sale_price ELSE pp.sale_price END AS final_sale_price

FROM product p, ... etc.

上面的代码有效(我已经简化了),基本上,产品的原始价格存储在别名“final_original_price”的列中,销售价格(可能为 NULL)作为“final_sale_price”返回。

我现在想在 SELECT 中添加一行以获得折扣。我不能使用实际表中的现有字段,因为我想要“final_original_price”和“final_sale_price”的返回值来进行计算。

例如

SELECT  p.productid, p.stylename,
CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.original_price ELSE pp.original_price END AS final_original_price,
CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.sale_price ELSE pp.sale_price END AS final_sale_price,

((final_original_price - final_sale_price) / final_original_price * 100) AS final_discount_percentage

FROM product p, ... etc.

以上不起作用,因为 Postgresql 返回“错误:列“final_original_price”在字符处不存在......”

所以,显然我不能使用 CASE 的返回值。我关于使用什么解决方案的问题:

1) 我真的可以像上面那样使用 case 的返回值吗?或者2) 我是否需要再次将 case 语句插入到我的计算中?这意味着我需要重复 CASE 代码,查询看起来会很长。如果必须的话,我会这样做,但我只是想知道是否有更好的方法。或者3) 我还可以在数据库中存储一个附加字段来存储折扣。此数据将是多余的,因为我的 CMS 需要确保在价格更新时更新该字段。然而,它会在比后端 CMS 运行更频繁的前端节省繁重的计算(如果以上被认为是繁重的)。

上述解决方案可能是最简单的,但我也想知道,如果我有时间这样做,这里是否还有其他值得考虑的解决方案?例如,这是编写“ View ”的好方案吗?就我个人而言,我从未设置过 View ,据我所知,数据库选择工作仍在后台进行,但是,如果设置了 View ,从开发人员的角度来看,上面的最终查询将更容易理解。

非常感谢!

最佳答案

使用

SELECT
productid,
stylename,
final_original_price,
final_sale_price,
((final_original_price - final_sale_price) / final_original_price * 100) AS final_discount_percentage
FROM
(
SELECT p.productid, p.stylename,
CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.original_price ELSE pp.original_price END AS final_original_price,
CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.sale_price ELSE pp.sale_price END AS final_sale_price
FROM product p, ... etc.
)

以上内容完全符合您的要求...如果出于某种原因您不想使用它,则将 CASE 语句插入到计算中(您问题中的选项 2)。

关于Postgresql CASE 语句 - 我可以在我的 SELECT 中使用 CASE 的返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com