gpt4 book ai didi

mysql - 在不同条件下选择同一列两次

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:02 25 4
gpt4 key购买 nike

我很难用 SQL 实现我的目标。花了几个小时在这里和其他地方阅读类似的问题,但我的问题似乎很独特。

我的数据库有几列:

client name || project || type || date || cost || correction
  Client1         Project1  TV    2018-1  100        no
  Client1         Project1  TV    2018-1  -50        yes

所以该表值得一些解释。 (每一行都有一个 auto_inc ID。) Correction = no 表示这是一个原始值,在预测财务时创建。 "is"表示这是后来的价格调整。

我的目标是同时查看预测和实际情况。所以对于每个月,它应该总结 correction = no values (这很简单

SELECT date, SUM(cost) FROM table WHERE correction='no' GROUP BY date)

然后列出所有实际值(只是没有 WHERE 子句的 SUM)。

行需要根据客户、项目、类型和日期进行匹配。这看起来很简单,但我自然会遇到单行错误。从逻辑上讲,我找不到如何执行此操作的解决方案,而且我更像是一个初学临时的 SQL 用户。

所以我想:

  • 月份列,
  • 带有 SUM(cost) WHERE correction='no' 的列,
  • 还有一个包含所有成本总和的列,当然这些都是按月区分的。

我将不胜感激。

最佳答案

使用条件聚合。

聚合函数对一组值执行计算并返回单个值。

条件聚合是对条件表达式的聚合,例如correction = 'no' 时所有成本的总和。这是通过聚合函数内部的 CASE 构造完成的(此处为 SUM):

select 
year(date), month(date),
sum(case when correction = 'no' then cost end) as sum_no,
sum(case when correction = 'yes' then cost end) as sum_yes,
sum(cost) as sum_total
from mytable
group by year(date), month(date)
order by year(date), month(date;

关于mysql - 在不同条件下选择同一列两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48171803/

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