mysql - 不同和的总和
问题描述
你好社区,
我在组合 3 个不同求和查询的值时遇到问题。我们有一个包含几列的表,例如:customer_id, amount_hours, start_date, end_date, one_time
。
有3个不同的类别/条件来总结它们。
one_time 是真的
end_date 为 NULL 并且 one_time 为 false
end_date 不为 NULL 且 one_time 为 false
我完成了这 3 个查询。他们完美地工作。现在,我当然想将结果添加到 customer_id 旁边的单个列中。表格代表的是“空闲时间”的数量(对不起,英语不是我的母语,我想不出更好的表达方式)。客户要么购买了一定数量的一次性付款,要么签订了一份每月增加 X 小时数量的合同。
假设客户随机商店购买了 20 小时作为一次性付款,去年全年支付了每月 5 小时,而在今年将其更改为每月 8 小时。那么它需要总和 20 + (12months * 5 hours = 60) + (8months {现在是八月} * 8 hours = 64) = 144。
到目前为止,我得到了 3 个查询来获得 20、60 和 64。但是如果我尝试类似的东西select sum ((select sum(....)+select sum(....)+select sum(....))
,那么它就不起作用了。我得到了语法错误,我感觉我正在尝试一些不正确的语法结构应该是什么样子的东西,添加了三个不同的求和查询。尝试谷歌搜索它,没有运气。有人可以帮忙吗?
第一个总和:
select sum (amount_hours) from [myTable] where customer_id=100112 AND one_time= 'True'
第二个总和:
select sum ((datediff(month, Start_Date, End_Date)+1)* amount_hours) from [myTable] where customer_id = 100112 AND one_time = 'False' and end_date is not NULL
第三次总和:
select sum ((datediff(month, Start_Date, Getdate())+1) * amount_hours) from [myTable] where customer_id = 100112 AND one_time = 'False' and end_date is NULL
我的样本故意包含一个 customer_id。以后会没有他们和一群人。
解决方案
1.one_time 为真
2.end_date 为 NULL 且 one_time 为 false
3.end_date不为NULL且one_time为false
没问题。
SELECT customer_id,
SUM(CASE WHEN one_time = 'True'
THEN amount_hours
END) sum1,
SUM(CASE WHEN end_date IS NULL and one_time = 'False'
THEN (DATEDIFF(MONTH, Start_Date, End_Date) + 1) * amount_hours
END) sum2,
SUM(CASE WHEN end_date IS NOT NULL and one_time = 'False'
THEN (DATEDIFF(MONTH, Start_Date, Getdate()) + 1) * amount_hours
END) sum3
FROM myTable
GROUP BY customer_id
如果需要,您可以添加ELSE 0
到 CASE。
推荐阅读
- c# - ASP.NET MVC Post 方法:模型属性不保留值
- javascript - 函数在 React 中是否获得最新的状态值?
- unity3d - 无法将可编写脚本的对象分配给游戏对象中的状态变量
- swift - Swift - iOS 14 更新后的绘图应用程序问题
- php - Twilio 调用的音频文件编码问题
- azure - 如何在 azure 数据工厂管道中添加验证以检查文件大小?
- python - 在 python/pygame 中输入错误 - 浮点数而不是整数
- time - Onclick 动态表中的当前时间
- java - 如何在关闭应用程序之前保存和恢复位图
- javascript - 在 for 循环中减少方法 - JS