子查询中的SQL SUM()

时间:2019-01-17 17:17:00

标签: mysql sql

我有一个具有以下架构的 Ledger 表:

LedgerId    (int,not null)
Timestamp   (datetime, not null)
CostCenter  (int, not null)
Payee       (varchar(50), not null)
Type        (varchar(3),not null)
Category    (varchar(24), not null)
Amount      (decimal(8,2) not null)
Tag         (varchar(30),null)
Memo        (varchar(150), null)

我记录了一家小型企业的费用交易。

到年底,对于任何收到600美元以上的承包商,我必须向IRS发出1099表。我运行以下查询(感谢StackExchange!)来获取此信息:

SELECT Payee as Name, SUM(Amount)as Total FROM Ledger 
where (convert(date,timestamp) < convert(date,'2019-01-01')) 
and (convert(date,timestamp) > convert(date,'2017-12-31')) 
and category like '%Contract%' 
group by Payee having SUM(amount) > 600 
order by Payee

这很棒,请给我列出每个承包商的清单以及2018年的总金额。

我现在想要的是一个查询,该查询将向我提供我在2018年为这些承包商花费的总金额(也用于国税局,表格1096)。 如果我将此查询用作获得总金额的子查询,则会出错。我该如何总计所有承包商费用?

1 个答案:

答案 0 :(得分:1)

您是说这行不通吗?

select sum(total)
from (select Payee as Name, SUM(Amount) as Total 
      from Ledger 
      where timestamp < '2019-01-01' and
            timestamp >= '2018-01-01' and
            category like '%Contract%' 
      group by Payee
      having sum(amount) > 600 
     ) l;

您不需要为要实现的逻辑进行日期转换。