[英]SQL - How to get the percentage of 2 sums
我正在尝试使点击率从上传到点击。 我将如何获得这个百分比?
我目前正在使用下面的代码,因此收到0(查看随附的img)。
SELECT geo_country, [created_at:date:aggregation] AS day,
SUM(case when name = 'adclick' then 1 else 0 end) as clicks,
SUM(case when name = 'camera_upload_image' then 1 else 0 end) as uploads,
CONVERT(DECIMAL(10,2), clicks / NULLIF(uploads, 0)) As CTR
FROM events
结果:
您遇到的是整数除法。
如果取2个整数
clicks = 3
uploads = 2
然后, clicks / uploads
等于1
而不是您期望的1.5
:
http://sqlfiddle.com/#!18/0ed4a9/8/0
从小提琴中可以看出,解决该问题的方法是确保在进行除法运算之前将值强制转换/转换为浮点数。
也将结果转换为十进制:
SELECT geo_country, [created_at:date:aggregation] AS day,
SUM(case when name = 'adclick' then 1 else 0 end) as clicks,
SUM(case when name = 'camera_upload_image' then 1 else 0 end) as uploads,
CONVERT(DECIMAL(10,2), CONVERT(DECIMAL(10,2),clicks) / NULLIF(CONVERT(DECIMAL(10,2),uploads), 0)) As CTR
FROM events
使用子查询或CTE:
SELECT c.*, clicks * 1.0 / NULLIF(uploads, 0) as ratio
FROM (SELECT geo_country, [created_at:date:aggregation] AS day,
SUM(case when name = 'adclick' then 1 else 0 end) as clicks,
SUM(case when name = 'camera_upload_image' then 1 else 0 end) as uploads
FROM events
GROUP BY geo_country, [created_at:date:aggregation]
) c;
的* 1.0
是避免整数除法的问题(即, 1/2=0
,而不是1.5
。的NULLIF()
是由零,以避免分裂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.