代码之家  ›  专栏  ›  技术社区  ›  GRoston

返回count(*)为0的所有行,包括count(*)[重复]

  •  2
  • GRoston  · 技术社区  · 6 年前

    要显示用户在某个时间范围内完成的操作数,很容易:

    SELECT first_name, last_name, actionCount
    FROM tmpAllUsers
    INNER JOIN (
        SELECT user_id, count(*) as actionCount
        FROM Actions
        WHERE action = 1 and
            actionDate >= @sDate and actionDate < @eDate
        GROUP BY user_id ) x
    ON tmpAllUsers.user_id = x.user_id;
    

    挑战是返回一个包含所有用户的表,包括那些actionCount=0的用户。我尝试的第一种方法是使用联合,但在MySQL中,临时表不能在同一个查询中使用两次。我的第二个想法是使用外部联接,但是不重用临时表的问题也出现了。

    你能建议一个可行的方法吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Shidersz    6 年前

    左连接 动作计数 无效的 ,如下所示:

    SELECT
        first_name,
        last_name,
        IFNULL(actionCount, 0)
    FROM
        tmpAllUsers
    LEFT JOIN (
        SELECT user_id, count(*) AS actionCount
        FROM Actions
        WHERE action = 1 AND actionDate >= @sDate AND actionDate < @eDate
        GROUP BY user_id ) x ON tmpAllUsers.user_id = x.user_id;