我有一张daily_data表来保存商店的条目、销售额、营业时间(可以是 100 种类型)。我的计划是计算许多商店(可以是 1000 家商店)的转化率、条目/小时、销售额/小时……。
它可以是 1 天、2 天或月、年的数据。
id_pos | 日期 | 数据类型 | 价值 |
---|---|---|---|
1 | 2021-11-01 | 1 | 100 |
1 | 2021-11-01 | 2 | 20 |
1 | 2021-11-01 | 3 | 8 |
2 | 2021-11-02 | 1 | 50 |
2 | 2021-11-02 | 2 | 10 |
2 | 2021-11-02 | 3 | 8 |
... | ... | ... | ... |
data_type列说明:
- 条目
- 销售量
- 小时
* id_pos : 店铺位置 ID
我的查询:
select id_pos,data_type, sum(value) as data
from daily_data
where id_pos IN (1,2) AND date>='2021-11-01' AND date<='2021-11-30'
group by id_pos,data_type
执行上述查询后,我处理编码结果以计算转换(销售额/条目)、每小时销售额、每小时条目数,...(处理具有许多异常情况的公式)。
| id_pos | data_type | value |
| 1 | conversion | 20% |
| 1 | entries per hour | 20.1 |
| 1 | sales per hour | 5.6 |
问题:
这种结构对于小数据就足够了,但是当我有 10-20 百万行时,查询性能就不好了!
所以我的计划是创建一个新的“total_data”表,以保存转换数据、每小时条目、每小时销售额(执行上述查询后)。通过这种方式,我可以直接选择最终数据,而无需在编码中处理任何公式。
id_pos | 日期开始 | 日期结束 | 数据类型 | 价值 |
---|---|---|---|---|
1 | 2021-11-01 | 2021-11-30 | 转换 | 10 |
1 | 2021-11-01 | 2021-11-30 | 条目/小时 | 20.1 |
1 | 2021-11-01 | 2021-11-30 | 销售额/小时 | 5.1 |
2 | 2021-11-01 | 2021-11-30 | 转换 | 22 |
2 | 2021-11-01 | 2021-11-30 | 条目/小时 | 6.2 |
2 | 2021-11-01 | 2021-11-30 | 销售额/小时 | 6.5 |
但问题是日期范围,它可以是 2021-11-02 到 2021-11-05 或数千个案例。如何制作正确的“data_total”表?