用简单的窗口函数求求2018年4月每个时段的,pv、uv 数量、按照uv转化率取top5,并且使用limit -- uv 转化率 = 转化人数/uv数量 ,假设现在转化人数是 1
时间: 2023-12-10 17:37:52 浏览: 65
TIA博途中如何使用MAX和MIN数学函数求取几个变量的最大值和最小值?.docx
5星 · 资源好评率100%
假设我们有以下数据表格:
```
+---------------------+-----+
| timestamp | url |
+---------------------+-----+
| 2018-04-01 00:00:00 | A |
| 2018-04-01 00:01:00 | B |
| 2018-04-01 00:02:00 | C |
| 2018-04-01 00:02:00 | D |
| ... | ... |
+---------------------+-----+
```
首先,我们需要将 timestamp 转换成每个时段的时间,并且统计每个时段内的 pv 和 uv 数量。可以使用类似以下的 SQL 语句:
```
SELECT
DATE_FORMAT(timestamp, '%Y-%m-%d %H:00:00') AS hour,
COUNT(*) AS pv,
COUNT(DISTINCT url) AS uv
FROM
table_name
WHERE
timestamp >= '2018-04-01 00:00:00' AND timestamp < '2018-05-01 00:00:00'
GROUP BY
hour
```
这里使用了 `DATE_FORMAT` 函数将 timestamp 转换成每个小时的时间,并且使用 `COUNT` 和 `COUNT(DISTINCT)` 分别统计了 pv 和 uv 的数量。
接下来,我们需要计算每个时段的 uv 转化率。可以使用类似以下的 SQL 语句:
```
SELECT
hour,
pv,
uv,
IF(uv = 0, 0, 1/uv) AS conversion_rate
FROM (
SELECT
DATE_FORMAT(timestamp, '%Y-%m-%d %H:00:00') AS hour,
COUNT(*) AS pv,
COUNT(DISTINCT url) AS uv
FROM
table_name
WHERE
timestamp >= '2018-04-01 00:00:00' AND timestamp < '2018-05-01 00:00:00'
GROUP BY
hour
) AS t
```
这里使用了一个内部查询来计算每个时段的 pv 和 uv 数量,并且使用了 `IF` 函数来处理 uv 为 0 的情况,避免除数为 0 的错误。
最后,我们需要按照 uv 转化率降序排序,并且取 top5。可以使用类似以下的 SQL 语句:
```
SELECT
hour,
pv,
uv,
conversion_rate
FROM (
SELECT
hour,
pv,
uv,
IF(uv = 0, 0, 1/uv) AS conversion_rate
FROM (
SELECT
DATE_FORMAT(timestamp, '%Y-%m-%d %H:00:00') AS hour,
COUNT(*) AS pv,
COUNT(DISTINCT url) AS uv
FROM
table_name
WHERE
timestamp >= '2018-04-01 00:00:00' AND timestamp < '2018-05-01 00:00:00'
GROUP BY
hour
) AS t
) AS t2
ORDER BY
conversion_rate DESC
LIMIT
5
```
这里使用了一个外部查询来排序并且取 top5,使用了 `ORDER BY` 和 `LIMIT` 语句。
阅读全文