查询以获取总和

时间:2020-04-17 10:34:32

标签: sql postgresql

假设我的数据

代码表

code_id | code_no | stats |
2         60         22A3
3         60         22A3

value_table

value_no | amount_value_one | amount_value_two | amount_diff | code_no |  sample_no  | code_id
1          1200.00             400.00             800.00        60         90          2
1           600.00             200.00             400.00        60        100          3
1          1800.00             600.00            1200.00        60        110          2
2          1200.00            1200.00               0.00        60        110          2
2           800.00             600.00             200.00        60         90          2
2           400.00               0.00             400.00        60        100          3

我想做的是获取所有 Sum amount_value_two,只保留 first amount_value_one,其中包含{{1 }}

输出可以总结为

value_no = 1

到目前为止,我有以下查询

amount_value_one | SUM_of_amount_value_two | amount_diff | sample_no
1200.00             1000.00                     200.00         90
 600.00              200.00                     400.00         100 
1800.00            1.800.00                       0.00         110

我上面使用的查询是错误的,因为它获得了两个 p.amount_value_one 的总和 和 p.amount_diff

它只是一个测试查询,因为我无法想象查询将是什么样。

1 个答案:

答案 0 :(得分:1)

假设您有一列指定顺序,则可以使用它来确定“第一”行。然后使用条件聚合:

SELECT SUM(CASE WHEN seqnum = 1 THEN p.amount_value_one END) as value_one,
       SUM(p.amount_value_two) as value_two,
       SUM(p.amount_diff) as amount_diff,
       p.sample_no as sampleNo
FROM (SELECT p.*,
             ROW_NUMBER() OVER (PARTITION BY p.sample_no ORDER BY <ordering column>) as seqnum
      FROM value_table p
     ) p JOIN
     code_table  ct
     ON ct.code_no = p.code_no AND
        ct.code_id = p.code_id
WHERE ct.stats = '22A3'
GROUP BY p.sample_no