创建计算列,创建一个视图?

时间:2017-07-04 21:36:05

标签: sql postgresql

我正在处理包含广告系列和营销效果数据的原始adwords数据。我需要根据符合某个“WHERE”标准的列进行计算。举个例子;如果在“广告相关性”列中,行=“低于平均值”,则应将列返回为“低于平均广告相关性展示次数”,此次出现的计算应为展示次数* 1.我还需要进行其他计算例如,无论在何处,都会出现在每一行中;列“QS”*“印象”。我最后需要将两列连接在一起,这两列将依次与另一个数据集循环。

如果不创建视图,这是否可行?我尝试使用“Where”查询创建一个但是它似乎受限于我可以提取多少,因为它可以基于一个且只有一个条件。

当前表格

Campaign|Adgroup|Expected clickthrough rate|QS|Impressions|
--------+-------+--------------------------+--+-----------+
USA-EN  |watches|Average                   |3 |1000       |
DE-DE   |rings  |Below Average             |5 |1300       |
CH-DE   |belts  |Average                   |6 |1234       |

期望的结果(这些是额外的/计算的列,但目标是在新表中包括顶部的列)

Key                  |Impressions with average ctr    |Weighted QS       |
**(Campaign and      |(Impressions *1 where "Expected |(QS * Impressions |
adgroup concatenated)|clickthroughrate =average)      |                  |**
---------------------+--------------------------------+------------------+
USA-ENwatches        |1000                            |                  | 
DE-DErings           |0                               |                  |
CH-DEbelts           |1234                            |                  |

1 个答案:

答案 0 :(得分:1)

对于IF - THEN逻辑,用例语句。 对于字符串的连接,请使用" ||"

这是一个基于您的"当前表"的示例。和#34;期望的结果":

Select (Campaign || '-' || Adgroup) AS Key
      ,CASE [Expected clickthrought rate]
            When 'Average' then (Impressions * 1)
            Else 0
        End AS [Impressions with average ctr]
     ,(QS * Impressions) AS [Weighted QS]
From MyTable