如何计算SQL行总和后的不同值(付款)的数量

问题描述 投票:0回答:1

我的'deals_payments'表为:

Due Date    Payment     ID
1-Mar-19    1,000.00    123
1-Apr-19    1,000.00    123
1-May-19    1,000.00    123
1-Jun-19    1,000.00    123
1-Jul-19    1,000.00    123
1-Aug-19    1,000.00    123
1-Jun-19    500.00      456
1-Jul-19    500.00      456
1-Aug-19    500.00      456

我有SQL代码:

select 
   count(*), payment

from (select deals_payments.*,
             (row_number() over (order by due_date) -
              row_number() over (partition by payment order by due_date)
             ) as grp
      from deals_payments
       where id = 123
           ) deals_payments
group by grp, payment
order by grp

这给了我我想要的(因为我只要求提供ID 123):

COUNT(*)    PAYMENT
6           1000.00

但是现在我需要根据到期日将两个ID(分别为123和456)的总和为:

COUNT(*)    PAYMENT
3           1000.00
3           1500.00

我尝试了以下操作,但这给了我“缺少右括号”错误。怎么了?

    select 
      count(*), 
      (select 
          sum(total) total
       from (select distinct 
                due_date,
                (select 
                   sum(payment) 
                from deals_payments 
                where  (due_date = a.due_date)) as total
             from deals_payments a 
             where a.id in (123, 456) 
             and payment > 0)

        group by due_date
        order by due_date)  b

    from (select deals_payments.*,
                     (row_number() over (order by due_date) -
                              row_number() over (partition by payment order by due_date)
                             ) as grp
                      from deals_payments
                       where id = 123
                           ) deals_payments
                group by grp, payment
                order by grp
sql count sum partition
1个回答
0
投票

这似乎真的很奇怪。我不明白为什么您的逻辑如此复杂。

怎么样?

select id, count(*), max(payment)
from (select dp.*,
             count(*) over (partition by due_date) as cnt
      from deal_payments dp
      where dp.id in (123, 456)
     ) dp
where cnt = 2
group by id;
© www.soinside.com 2019 - 2024. All rights reserved.