首页 > 解决方案 > 查询以获取 SUM

问题描述

假设我有一个数据

代码表

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

值表

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并保留第一个 amount_value_one具有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

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

SELECT SUM(p.amount_value_one) as value_one,
SUM(p.amount_value_two) as value_two,
SUM(p.amount_diff) as amount_diff,
p.sample_no as sampleNo FROM value_table p
INNER JOIN code_table On code_table.code_no = p.code_no
WHERE code_table.code_id = p.code_id
AND code_table.stats = '22A3'
GROUP BY p.sample_no

我使用的上面的查询是错误的,因为它得到p.amount_value_onep.amount_diff的总和

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

标签: sqlpostgresql

解决方案


假设您有一个指定排序的列,那么您可以使用它来计算“第一”行。然后使用条件聚合:

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

推荐阅读