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

  1. WHERE 子句的条件必须使用 AND / OR 连接,而不是用逗号。
  2. 如果用了聚合函数 COUNT,必须用GROUP BY 指定按哪个字段分组。
  3. 直接将 order_tb 和 visit_tb 按 user_id join,会导致一个用户的多笔订单和多次访问形成“笛卡尔积”式的重复记录。比如当用户下了n次单,访问m次后,会形成n*m条记录(笛卡尔积),但实际上只有m个访问量。所以要先选出下单用户id。
  4. 根据日期选出下单用户后,要使用DISTINT进行去重。