SQL CREATE VIEW 与 for in for 和 SELECTS
Posted
技术标签:
【中文标题】SQL CREATE VIEW 与 for in for 和 SELECTS【英文标题】:SQL CREATE VIEW with for in for and SELECTS 【发布时间】:2017-08-04 17:02:47 【问题描述】:我正在尝试使用此表在 Postgres 数据库中创建视图:
|----|------|------|--------|--------|--------|--------|
| id | t1_n | t2_n | value1 | value2 | value3 | valueX |
|----|------|------|--------|--------|--------|--------|
| 1 | A | X | 12 | 2 | 1 | .. |
| 2 | B | Y | 2 | 2 | 20 | .. |
| 3 | C | Z | 41 | 1 | 1 | .. |
| 4 | A | Z | 43 | 3 | 4 | .. |
| 5 | B | Y | 15 | 5 | 1 | .. |
| 6 | C | X | 52 | 2 | 5 | .. |
| 7 | .. | .. | .. | .. | .. | .. |
|----|------|------|--------|--------|--------|--------|
在视图中,每个区域都应与每个现有分区一起输入。 接下来的列包含来自各个 SELECTS 的结果。
查看:
|----|------|------|------|------|------|------|
| id | t1_n | t2_n | sum1 | sum2 | sum3 | sum4 |
|----|------|------|------|------|------|------|
| 1 | A | X | .. | .. | .. | .. |
| 2 | A | Y | .. | .. | .. | .. |
| 3 | A | Z | .. | .. | .. | .. |
| 1 | B | X | .. | .. | .. | .. |
| 2 | B | Y | .. | .. | .. | .. |
| 3 | B | Z | .. | .. | .. | .. |
| 1 | C | X | .. | .. | .. | .. |
| 2 | C | Y | .. | .. | .. | .. |
| 3 | C | Z | .. | .. | .. | .. |
| 3 | .. | .. | .. | .. | .. | .. |
|----|------|------|------|------|------|------|
sum1 应该是:
SELECT sum(value1) FROM table1 WHERE t1_n = [current_t1_n] AND t2_n = [current_t2_n];
sum2 应该是:
SELECT sum(value2) FROM table1 WHERE t1_n = [current_t1_n] AND t2_n = [current_t2_n];
sum3 应该是:
SELECT sum(value3) FROM table1 WHERE t1_n = [current_t1_n] AND t2_n = [current_t2_n];
也许是这样的:
for(t1_n)
for(t2_n)
set sum1, sum2, sum3, sumX...
谢谢,求帮助
【问题讨论】:
【参考方案1】:将总和计算为子查询,并将这些子查询连接到所有公共列的列表中。这是该模式的一个示例:
select
k.t1_n,
k.t2_n,
sum1,
sum2
from
(select distinct t1_n, t2n from table1) as k
left join (
select t1_n, t2_n, sum(value1) as sum1
from table1
group by t1_n, t2_n
) as s1 using (t1_n, t2_n)
left join (
select t1_n, t2_n, sum(value2) as sum2
from table1
group by t1_n, t2_n
) as s2 using (t1_n, t2_n)
;
您可能希望将其扩展到其他列和总和。如果您的表没有缺失值,则可以改用内连接。
【讨论】:
以上是关于SQL CREATE VIEW 与 for in for 和 SELECTS的主要内容,如果未能解决你的问题,请参考以下文章
我建立的sql列表出现'CREATE VIEW' 必须是查询批次中的第一个语句。