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的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Database 权限与角色管理

create view in view

我建立的sql列表出现'CREATE VIEW' 必须是查询批次中的第一个语句。

SQL基础语法—create view语句

Create a database in mysql for mac

WPS 2019 How To Create New Sheets For Each Row In Excel?