sql - 查询以获取 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_one 和p.amount_diff的总和
它只是一个测试查询,因为我无法想象查询会是什么样子。
解决方案
假设您有一个指定排序的列,那么您可以使用它来计算“第一”行。然后使用条件聚合:
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
推荐阅读
- flutter - 如何在 Flutter 应用中使用 GoogleFonts 作为默认字体?
- python-3.x - 使用flask和Sqlite3时如何修复TypeError:'NoneType'对象不可下标?
- java - 在没有 OnClickListener 的 Android 应用程序中检索 Firebase 数据
- excel - 在 Excel 中将一行拆分为多行
- anaconda - Anaconda Navigator 1.10.0 - 从 1.9.x 版本升级后在 Ubuntu 20 (Focal Fossa) 上缺少最大化机会
- jenkins-pipeline - 一个 liquibase .properties 文件中可能有不同的参数?
- html - How to auto add quotation marks on a html string
- c++ - 在循环外使用 return 语句,在函数中使用循环内部的一个
- r - 如何在现有配对图上添加更多点/点?
- r - 为 R 中的所需输出值提供一个可能的输入