【问题标题】:SQL CREATE VIEW with for in for and SELECTSSQL CREATE VIEW 与 for in for 和 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...}}

谢谢,求帮助

【问题讨论】:

    标签: sql postgresql select view


    【解决方案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)
     ;
    

    您可能希望将其扩展到其他列和总和。如果您的表没有缺失值,则可以改用内连接。

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 1970-01-01
      • 2011-07-12
      • 2016-11-09
      • 2022-12-01
      • 2012-11-18
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多