⚠️统计注意点1
1.1Tableau的百分比不完全百分之百 保留两位小数 (保留几位小数会在最后一位上下加1)
- 如1.00 保留两位为0-0.99 和 1.01-2
- 如1.0000 保留四位为0-0.9999 和 1.0001-2
真实值 | 四舍五入值 | 百分比 |
0.003 | 0.00 | 0% |
0.003 | 0.00 | 0% |
0.004 | 0.00 | 0% |
0.990 | 0.99 | 99% |
真实值 | 四舍五入值 | 百分比 |
0.006 | 0.01 | 1% |
0.006 | 0.01 | 1% |
0.008 | 0.01 | 1% |
0.980 | 0.98 | 98% |
1.2 Tableau平均数的计算 sum(clk) / sum(impr) ≠ avg(clk/impr)
MySQL avg(impr) = sum(impr) / count(impr) 如果列存在null 就不算总数
- 取前5条 第5条为null avg(impr) = sum(impr) / count(impr) 400 / 4 = 100
- 取前5条 第5条为200 avg(impr) = sum(impr) / count(impr) 600 / 5 = 120
注意⚠️:
部分先avg(impr) 然后总体avg(impr) ≠ 整体avg(impr)
- 取前5条 第5条为200 先部分avg(impr)再总体avg(impr) 500 / 4 = 125
- 取前5条 第5条为200 avg(impr) = sum(impr) / count(impr) 600 / 5 = 120
clk | impr |
1 | 100 |
1 | 100 |
3 | 100 |
4 | 100 |
5 | null/200 |
取前2条 sum(clk) / sum(impr) = 2 / 5 = 40%
取前2条 avg(clk / impr) = avg(50%,33%) = 41.5%
clk | impr | clk/impr |
1 | 2 | 50% |
1 | 3 | 33% |
sum(clk) / sum(impr) clk_rate
等同于
avg(clk) / avg(impr) 如果数据都是正常的
impr出现null,0另算
2 1 1
2 null 0
2 1 1
1.3 MySQL 被除数为0 或者null 以及其他非数值类型 结果为null
分子 | 分母 | 结果 |
1 | 0 | null |
1 | null | null |
1 | '字符' | null |
1 | '1' | 1 |
1 | true/false | true为1 false为null |
select 1/0 -- null
union all
select 1/null -- null
union all
select 1 / '字符' -- null
union all
select 1 / '1' -- 1
union all
select 1 / true -- 1
union all
select 1 / false -- null
1.4 MySQL 其他类型与数值类型进行计算会默认进行转换
MySQL总共的数据类型为三种:数值类型、日期和时间类型、字符串类型
https://www.runoob.com/mysql/mysql-data-types.html
这些类型与数值类型进行算术运算会进行默认转化:
数值类型 可以直接进行算术运算
字符串类型 如果字符全是数值直接转换成数值,其他为0
日期和时间类型 默认将日期和时间类型转成对应的整型,进行算术运算
⚠️MySQL没有布尔类型,默认true为1 false为0
分子 | 分母 | 结果 |
6.8 | 1 | 6.8 |
'6.8' | 1 | 6.8 |
'字符' | 1 | 0 |
true | 1 | 1 |
2019-10-01 00:00:00 | 1 | 20191001000000.0000 |
null | 1 | null |
select 6.8 / 1 -- 6.8
union all
select '6.8' / 1 -- 6.8
union all
select '字符' / 1 -- 0
union all
select true / 1 -- 1
union all
select false / 1 -- 0
union all
select null / 1 -- null