帮我改进一下这段SQL语句“SELECT COUNT(DISTINCT userid) * 100.0 / (SELECT COUNT(DISTINCT userid) FROM danche) AS '骑行时间大于60分钟的人数比例' FROM danche where cycletime >'01:00:00';”
时间: 2024-03-20 20:42:25 浏览: 102
这段 SQL 语句的逻辑是计算骑行时间大于 60 分钟的人数比例。我注意到这段语句中有两个子查询,可以考虑使用 JOIN 语句来代替子查询,以提高性能。同时,为了避免使用字符串类型的时间字段,可以将时间字段转化为时间戳进行比较。
下面是改进后的 SQL 语句:
```
SELECT
COUNT(DISTINCT d1.userid) * 100.0 / COUNT(DISTINCT d2.userid) AS '骑行时间大于60分钟的人数比例'
FROM
danche d1
JOIN
(SELECT DISTINCT userid FROM danche) d2 ON d1.userid = d2.userid
WHERE
TIMESTAMPDIFF(MINUTE, d1.cycletime, d1.endtime) > 60;
```
这段 SQL 语句使用了 JOIN 语句代替了子查询,并且使用了 TIMESTAMPDIFF 函数计算了骑行时间。
阅读全文