sql - 创建表格视图,汇总行中的所有列以及行名等于列名的列的所有行
问题描述
我有一个如下所示的 postgresql 表:
name |rock|paper|scissors
__________|____|_____|________
rock | .5 | 0 | 2
paper | 2 | 1 | 0
scissors | 1 | 4 | 2
我想创建一个 postgresql 视图,将每个名称的行和列汇总在一起,如下所示:
name |strong|weak
__________|______|____
rock | 2.5 | 2.5
paper | 3 | 5
scissors | 7 | 4
我在第二个表中想要的是两列。一个是第一个表的行中所有列的总和,按名称分隔。第二列是该列等于名称的行的总和。
我可以让strong
专栏按我想要的方式工作,但我不知道如何获得weak
专栏。这是我最近的尝试。
SELECT
name,
(rock + paper + scissors) AS strong,
(sum(rock) + sum(paper) + sum(scissors)) AS weak
FROM mytable
GROUP BY name;
这只会生成一个弱列等于强列的表,如下所示:
name |strong|weak
__________|______|____
rock | 2.5 | 2.5
paper | 3 | 3
scissors | 7 | 7
我怎样才能达到我想要的结果?
解决方案
可以创建视图,如下所示:
create view v1 as
select
name,
rock + paper + scissors as strong,
(select
sum(case
when t1.name = 'rock' then t2.rock
when t1.name = 'paper' then t2.paper
when t1.name = 'scissors' then t2.scissors
end
) from mytable t2
) as weak
from mytable t1
推荐阅读
- amazon-web-services - AWS CDK -- 错误:在 Azure DevOps 管道中找不到模块“@aws-cdk/cloud-assembly-schema”
- asp.net - 您如何使用没有明显扩展名的网站 URL
- flutter - 在 Flutter 中缩小文本基线以下的区域
- g++ - 如何将 rpath 与 LLD 链接器 (LLVM) 一起使用
- react-hooks - React 状态变量被覆盖(useState)
- regex - 表示二进制 32 位十进制数的最佳正则表达式是什么?
- tailwind-css - 如何使用 watch 编译设置 tailwindcss
- mysql - MySQL 通过 id 连接 2 个表 A,B,其中 A.id 是 B.id 的子字符串
- flutter - Flutter:如何将文本小部件中心放在屏幕上
- python - 如何从txt文件中读取特定的txt并使用python将其格式化为表格