数字除法格式输出问题



我的结果是:

| ad_id | ctr   |
+-------+-------+
| 1     | 66.67 |
| 3     | 50.00 |
| 2     | 33.33 |
| 5     | 0.00  |
+-------+-------+

我的查询如下

select ad_id, coalesce(Round(total_clicks / (total_clicks + total_views) * 100,2),0) as ctr
from (

select ad_id, 
sum(case when action = 'Clicked' then 1 else 0 end) as total_clicks,
sum(case when action = 'Viewed' then 1 else 0 end) as total_views
from ads
group by 1) a
group by 1
order by 2 desc, 1 asc

我知道在这样计算时,有时需要转换为十进制或浮点,就好像我在结果输出中的第一行是66.67,在我的查询中,它实际上是.06666667,但这不应该计算为0吗,因为我没有转换为数字或十进制?我只有100,但即便如此,这也不应该只给我66吗?还是四舍五入可以转换成十进制?正如我在sql中所知道的那样,当你进行除法时,你需要转换为十进制以确保输出有十进制?谢谢

在MySQL中,/运算符总是执行双精度或小数运算。如果您想要整数除法,请使用DIV

SELECT 1 / 2 => 0.5
SELECT 1 DIV 2 => 0

我建议您将查询写成:

select ad_id, avg( action = 'Clicked' ) as ctr
from ads
where action in ('Clicked', 'Viewed')
group by 1;

MySQL将布尔值视为数字上下文中的数字——1表示true,0表示false。Average适用于十进制数,因此在这种情况下无需担心整数平均值。

相关内容

  • 没有找到相关文章

最新更新