mysql查询中的条件求和值

时间:2015-04-24 06:53:49

标签: mysql if-statement sum

我有一个包含services for invoices的mysql表。

看起来像

servicename|ammount|price|tag(type of service)|discount(service worthy of discount, true or false)|clientDiscount(client worthy of discount, true or false)

我需要进行groups by yearsums(amount * price)

的查询

但是,如果discountclientDiscounttrue,我需要计入discount of 15%

我尝试了案例和if statements,但没有任何作用。我不是真的 知道女巫到底要开始了。说实话,我无法理解案件和陈述的运作方式。我想我需要制作一个包含折扣真实和客户折扣真实的服务的总和,然后另一个包括没有折扣的服务的总和,并添加这些upp以获得正确的金额?现在它就像我脑中的蚂蚁农场。

2 个答案:

答案 0 :(得分:1)

你想要这个:

select year(invoicedate), sum(amount * price * if(discount and clientdiscount, 0.85, 1)) total
  from invoices
  group by year(invoicedate);

demo here

if语句的工作原理如下。 if(condition, value-if-true, value-if-false)。因此,在您的示例中,如果discount and clientdiscount为真(即它们均为1),则会返回您的折扣金额15%X的折扣与乘以{相同{1}})。如果条件为false,则返回1 - X,这不会修改1的结果。总而言之,在处理amount * price后,if变为:
sum
OR
sum(amount * price * 0.85) -- if discount and client discount are both 1

答案 1 :(得分:0)

您可以在没有if的情况下对其进行汇总。 discountclientdiscount是整数,因此您可以简单地将其乘以折扣百分比。稍微修改过的@pala脚本:

select year(invoicedate), sum(amount * price * (1 - discount * clientdiscount * 0.15)) total
  from invoices
  group by year(invoicedate);