如何转置此表,所以我有两列,一列显示付费用户的比例和一列显示免费用户的比例。另外,在我的脚本中,有什么方法可以让代码更加简洁,'SQL'就像?我似乎也无法在sqlfiddle中使用select语句创建表,因为我得到一个错误,说它只能在模式屏幕中创建。无论如何,我可以将sql语句嵌入到新表中吗?最简洁的方式转置SQL表
我已经创建了sqlfiddle一个脚本,计算不同类型的用户的一些下载指标:http://sqlfiddle.com/#!9/79bea4/1
如何转置此表,所以我有两列,一列显示付费用户的比例和一列显示免费用户的比例。另外,在我的脚本中,有什么方法可以让代码更加简洁,'SQL'就像?我似乎也无法在sqlfiddle中使用select语句创建表,因为我得到一个错误,说它只能在模式屏幕中创建。无论如何,我可以将sql语句嵌入到新表中吗?最简洁的方式转置SQL表
我已经创建了sqlfiddle一个脚本,计算不同类型的用户的一些下载指标:http://sqlfiddle.com/#!9/79bea4/1
SELECT df.Date,
SUM(CASE WHEN ad.paying_customer = 'No'
THEN df.downloads ELSE 0 END)/
SUM(CASE WHEN ad.paying_customer = 'No' THEN 1 ELSE 0 END) AS `Average Downloads/Free User`,
SUM(CASE WHEN ad.paying_customer = 'Yes'
THEN df.downloads ELSE 0 END)/
SUM(CASE WHEN ad.paying_customer = 'Yes' THEN 1 ELSE 0 END) AS `Average Downloads/Paid User`
FROM
(
SELECT date,
user_id,
SUM(downloads) AS downloads
FROM download_facts
GROUP BY date,
user_id
) df
INNER JOIN user_dimension ud
ON df.user_id = ud.user_id
INNER JOIN account_dimension ad
ON ud.account_id = ad.account_id
GROUP BY df.Date
演示在这里:
您可以通过计算平均取下载的总和并除以用户的数量。然后count(distinct)
可以得到每个组中的用户:
select df.date,
(sum(df.downloads)/
count(distinct case when ad.paying_customer = 'No' then df.user_id end)
) as avg_free,
(sum(df.downloads)/
count(distinct case when ad.paying_customer = 'Yes' then df.user_id end)
) as avg_paying
from download_facts df left join
user_dimension ud
on df.user_id = ud.user_id left join
account_dimension ad
on ad.account_id = ud.account_id
group by df.date;
为什么这个问题downvoted,除了是凌乱? –