当前位置: 首页 > 知识库问答 >
问题:

经过多次折扣后的产品最终价格

章越
2023-03-14

我有两张桌子。一个ID及其价格表和第二个每个ID折扣表。在折扣表中,一个Id可以有很多折扣,我需要知道一个Id的最终价格。

查询它的最佳方式是什么(在一次查询中)?对于每个id的许多折扣,查询应该是通用的(不仅仅是下面示例中提到的2个)

例如表1

id  price   
1   2.00   
2   2.00   
3   2.00   

表二

id  Discount   
1   0.20   
1   0.30   
2   0.40   
3   0.50   
3   0.60   

最终结果:

id  OrigPrice   PriceAfterDiscount  
1   2.00        1.12     
2   2.00        1.20      
3   2.00        0.40      

共有2个答案

郎星汉
2023-03-14

通常,它可以通过log/exp函数的技巧来完成,但它很复杂。下面是一个基本示例

declare @p table(id int, price money)
declare @d table(id int, discount money)

insert into @p values
(1, 2),
(2, 2),
(3, 2)

insert into @d values
(1, 0.2),
(1, 0.3),
(2, 0.4),
(3, 0.5),
(3, 0.6)


select p.id, 
       p.price, 
       p.price * ca.discount as PriceAfterDiscount  
from @p p
cross apply (select EXP(SUM(LOG(1 - discount))) as discount FROM @d where id = p.id) ca

对于更简单的(基于光标的方法),您将需要一个递归的CTE,但在这种情况下,您需要discounts表中的某个唯一的排序列才能正确运行它。这在@Tanner`的回答中显示了出来。

最后,您可以使用常规光标进行处理

葛景龙
2023-03-14

下面是另一种方法:

SELECT T1.ID, T1.Price, T1.Price * EXP(SUM(LOG(1 - T2.Discount)))
FROM T1 INNER JOIN T2 ON T1.ID = T2.ID
GROUP BY T1.ID, T1.Price

exp/log技巧只是做乘法的另一种方法。

如果您在T1中有条目,而在T2中没有折扣,那么您可以将INNER JOIN更改为LEFT JOIN。您将得到以下结果:

ID   Price   Discount
4    2.00    NULL

您的逻辑可以考虑折扣价格列中的空值并取而代之的是原始价格,或者只是为这些值添加一个0折扣记录。

 类似资料:
  • 使用最新版本的Woocommerce中的Mystile主题,我覆盖了variation.php以显示根据数量和选择的变化而定的折扣价格。我有3个属性:“marquage”,“couleurs”和“couleursàmarquer”。 这是我的php,添加在woocommerce_before_add_to_cart_form之后。 好吧,这很管用。这些行允许我捕获变量中的变化价格,目前仅限于Cou

  • 嗨,我正在尝试计算的百分比折扣的产品,在一个产品列表页上出售,有一个过去和现在的价格。 我已经有了用来获得百分比折扣的代码,但我似乎不能让它对每个产品动态地工作。目前,它将运行计算,然后打印每个产品的相同百分比折扣,即使是全价产品。 对此,我们将不胜感激。谢谢! null null

  • 我想尝试定义下面的公式来计算旧价格和新价格之间的关系,并在文本小部件上显示它,但当我想在双变量中使用它时,却出现了这样的错误:“只有静态成员可以在初始化器中访问”,这就是我想要做的:

  • 我需要找到产品的最低和最大价格,这样我就可以用它来设置我的价格过滤器的范围。我在catalog/model/layer/filter/price.php中使用了getMaxPriceInt()和getMinPriceInt()方法。但是返回的值基于'min_price'字段。 如何根据final_price找出集合中产品的最低和最高价格?也就是说,如果集合中有4个产品(我只登记需要的字段) get

  • 问题内容: 我在主题中有此代码以显示价格后的百分比,并且在WooCommerce v2.6.14中运行良好。 但是此代码段在WooCommerce 3.0+版本上不再起作用。 我该如何解决? 这是该代码: 问题答案: 更新 -2019 (避免四舍五入的价格问题) -2017 (避免百分比值) 在WooCommerce 3.0+中,该钩子已替换为另一个钩子,该钩子现在具有3个参数(但不再有该 参数)

  • 问题内容: 目标 在数据库中选择每种产品的最低/最高价格。 问题 我只能获得具有指定标识符的产品。 我有的 我正在使用 MySQL, 并且有以下查询: 我的回报是,和。 解决方案 谢谢您的帮助。上面的两个答案都是正确的-但我选择@GordonLinoff答案被接受,因为我认为这将对初学者更加有用和享受-‘’但真的要感谢你们两个人。 最终查询: 干杯! 问题答案: 首先,使用时,即使MySQL不需要