sql - 如何在 SQL 中将 2 个不同列的总和作为一个列?
问题描述
我有一张这样的桌子-
Product | Competitor | Comparison Count
A B 3
C D 5
B A 2
E A 1
我需要产品 A 的输出,它的竞争对手和这样的计数 -
Product | Competitor | Comparison Count
A B 5
A E 1
我正在使用 postgresql,当产品 A 出现在上面的产品和竞争对手列上时,我对如何汇总产品 A 的比较计数一无所知。任何线索将不胜感激。谢谢!
解决方案
在选择中使用条件列。在我们正在搜索的示例中B
,数据有点扩展:
with my_table(product, competitor, comparison_count) as (
values
('A', 'B', 3),
('C', 'D', 5),
('B', 'A', 2),
('B', 'D', 2),
('E', 'A', 1),
('D', 'B', 4)
)
select
case when product = 'B' then product else competitor end as product,
case when product = 'B' then competitor else product end as competitor,
sum(comparison_count) as comparison_count
from my_table
where product = 'B' or competitor = 'B'
group by 1, 2
order by 2
product | competitor | comparison_count
---------+------------+------------------
B | A | 5
B | D | 6
(2 rows)
推荐阅读
- firebase - 处理 firebase 身份验证错误 Flutter
- c++ - 您如何在 Vulkan 中正确添加子分配的缓冲区?
- julia - 如何编写一个将任意数量的参数传递给另一个函数的 Julia 函数?
- perl - 在子例程中运行 Getopt::Long::GetOptions 的正确方法
- r - 如何在 mlr3proba 的嵌套交叉验证中转换“2 级 ParamUty”类?
- c# - C# Initialize an inherent object and get error "The entity cannot be constructed in a LINQ to Entities query"
- fastapi - 使用 fastAPI 提供文件的问题
- javascript - 节点js和reactJS的“无法发布错误”
- sql-server - SQL Server 触发器:如何将空格分隔的文本分解为电子邮件列表
- javascript - 为什么点击音量调低按钮正确减小而音量调高按钮增加到最大值