如何在SQL中将行转换为计算列值

如何在SQL中将行转换为计算列值,sql,amazon-redshift,Sql,Amazon Redshift,我的SQL表的格式如下,如何将我的表转换为以冒号形式给出CTR Date |Type |count --------+---------------------------+------ 1-Apr |Clicks |500 1-Apr |Impression |1000 1-Apr |distict user Clicks

我的SQL表的格式如下,如何将我的表转换为以冒号形式给出CTR

    Date    |Type                       |count
    --------+---------------------------+------
    1-Apr   |Clicks                     |500
    1-Apr   |Impression                 |1000
    1-Apr   |distict user Clicks        |300
    1-Apr   |distict user impressions   |450
    2-Apr   |Clicks                     |520
    2-Apr   |Impression                 |1020
    2-Apr   |distict user Clicks        |320
    3-Apr   |distict user impressions   |470
我希望它成为CTR(点击率)
例如4月1日CTR=500/1000%=50% 例如4月2日CTR=520/1020%=42.30%

Date    |CTR    |Distict User CTR
--------+-------+------------------
1-Apr   |50%    |66.60%
2-Apr   |42.30% |68.08





SELECT 
   date , 
   CalculateCTR,      <-- How? 
   calculate DISTINCT CTR
FROM Metrics
Date | CTR | Distict用户CTR
--------+-------+------------------
4月1日| 50%| 66.60%
4月2日| 42.30%| 68.08
挑选
日期,

CalculateCTR,修改后的pivot查询应在此处工作:

SELECT
    Date,
    100.0*MAX(CASE WHEN Type = 'Clicks' THEN count END) /
        MAX(CASE WHEN Type = 'Impressions' THEN count END) AS CTR,
    100.0*MAX(CASE WHEN Type = 'distinct user Clicks' THEN count END) /
        MAX(CASE WHEN Type = 'distinct user impressions' THEN count END) AS "Distinct User CTR"
FROM Metrics
GROUP BY Date;

修改后的pivot查询应在此处工作:

SELECT
    Date,
    100.0*MAX(CASE WHEN Type = 'Clicks' THEN count END) /
        MAX(CASE WHEN Type = 'Impressions' THEN count END) AS CTR,
    100.0*MAX(CASE WHEN Type = 'distinct user Clicks' THEN count END) /
        MAX(CASE WHEN Type = 'distinct user impressions' THEN count END) AS "Distinct User CTR"
FROM Metrics
GROUP BY Date;

为什么我们需要
MAX
?我尝试了上述操作,得到了
null
您确定
类型
列包含准确的文本
点击次数
印象
等,并且没有空格吗?我的查询应该有效
NULL
值表示某些日期缺少类型,这是您的数据的问题。为什么需要
MAX
?我尝试了上述操作,得到了
null
您确定
类型
列包含准确的文本
点击次数
印象
等,并且没有空格吗?我的查询应该有效
NULL
值表示某些日期缺少类型,这是数据的一个问题。