SELECT o.user_id, COUNT(*) as visit_nums FROM ( SELECT DISTINCT user_id FROM order_tb ot WHERE DATE (ot.order_time) = '2022-09-02' ) AS o JOIN visit_tb vt ON o.user_id = vt.user_id WHERE DATE (vt.visit_time) = '2022-09-02'AND DATE (vt.leave_time) = '2022-09-02' GROUP BY o.user_id ORDER BY visit_nums DESC
- WHERE 子句的条件必须使用 AND / OR 连接,而不是用逗号。
- 如果用了聚合函数 COUNT,必须用GROUP BY 指定按哪个字段分组。
- 直接将 order_tb 和 visit_tb 按 user_id join,会导致一个用户的多笔订单和多次访问形成“笛卡尔积”式的重复记录。比如当用户下了n次单,访问m次后,会形成n*m条记录(笛卡尔积),但实际上只有m个访问量。所以要先选出下单用户id。
- 根据日期选出下单用户后,要使用DISTINT进行去重。