下面代码哪里写的不对 select t2.tag,sum(if_retweet),sum(if_retweet)/count(start_time) retweet_rate from tb_user_video_log as t1 inner join tb_video_info as t2 on t1.video_id=t2.video_id where date_format(start_time,'%Y%m%D') between date_sub(max(date_format(start_time,'%Y%m%D')),interval 30 day) and max(date_format(start_time,'%Y%m%D')) group by t2.tag order by retweet_rate desc
时间: 2024-03-27 13:34:49 浏览: 59
以下是代码存在问题的地方:
1. `if_retweet` 函数缺少参数,应该指定一个字段或表达式作为参数。
2. `count(start_time)` 中的参数应该使用 `distinct`,否则会重复计算。
3. `date_format(start_time,'%Y%m%D')` 中的 `%D` 应该改为 `%d`,否则日期格式不正确。
4. 在 `group by` 语句中,如果 `select` 中的某个字段不在 `group by` 中出现,那么这个字段必须使用聚合函数进行计算,否则会报错。
下面是修改后的代码:
```
SELECT t2.tag, SUM(IF(t1.if_retweet = 1, 1, 0)), SUM(IF(t1.if_retweet = 1, 1, 0)) / COUNT(DISTINCT t1.start_time) AS retweet_rate
FROM tb_user_video_log AS t1
INNER JOIN tb_video_info AS t2 ON t1.video_id = t2.video_id
WHERE DATE_FORMAT(t1.start_time, '%Y%m%d') BETWEEN DATE_SUB(MAX(DATE_FORMAT(t1.start_time, '%Y%m%d')), INTERVAL 30 DAY) AND MAX(DATE_FORMAT(t1.start_time, '%Y%m%d'))
GROUP BY t2.tag
ORDER BY retweet_rate DESC;
```
阅读全文