我有这张table:
| 产品|量|客户数|
| --|--|--|
| 产品1| 100 | 9 |
| 产品1| 200 | 15 |
| Prdct_2| 50 | 2 |
| Prdct_3| 40 | 5 |
| Prdct_3| 80 | 5 |
| Prdct_4| 10 | 1 |
我想把这个和下面的表格结合起来
| 产品|汇票号码|
| --|--|
| 产品1| 6 |
| 产品1| 3 |
| Prdct_2| 4 |
| Prdct_3| 10 |
| Prdct_3| 5 |
| Prdct_4| 2 |
此外,我想添加所有类别的总和。所以结果应该是这样的:
| 产品|量|客户数|汇票号码|
| --|--|--|--|
| 产品1| 300 | 24 | 9 |
| Prdct_2| 50 | 2 | 4 |
| Prdct_3| 120 | 10 | 15 |
| Prdct_4| 10 | 1 | 2 |
| 总| 480 | 35 | 30 |
我该怎么解决?谢谢你的回答。
3条答案
按热度按时间8tntrjer1#
我没有postgres立即测试,但看看这个
sql
,希望这对你有用.sql
使用UNION ALL
操作从两个表中创建临时表t
,该操作允许合并表,而不管是否存在重复的行。然后,查询按产品列对表t
中的数据进行分组,其中具有相同产品名称的所有行都分组在一起。对于每个组,查询将汇总列amount
、no_of_customers
和no_of_bills columns
中的值,并按以下顺序返回结果:product
、amount
、no_of_customers
、no_of_bills
。这就是逻辑
bpsygsoo2#
我不确定这是否是最简单的解决方案,但它对我有效。我将表命名为
products
和bills
:我使用通用表表达式(CTE)
product_summary
来计算products
表中每个产品的amount
和no_of_customers
之和。CTEbill_summary
计算bills
表中每个产品的no_of_bills
之和。然后将这两个结果与UNION ALL
合并。svujldwt3#
您可以使用
group by
和grouping sets
计算小计和总计,然后使用join将CTE
s的两个结果合并合并:测试结果:
Demo here