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进行去重。