返回count(*)为0的所有行,包括count(*)

li9yvcax  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(304)

这个问题在这里已经有了答案

mysql count不能显示0个值(1个答案)
两年前关门了。
在存储过程中,我创建并填充一个临时表(tmpallusers),其列为user\u id(int)、first\u name(varchar)和last\u name(varchar)。在数据库中,我有另一个表(actions),它记录了用户每次完成特定操作的情况。该表的列是user\ id(int)、action(int)和actiondate(datetime)。
要显示用户在某个时间范围内完成的操作数,很容易:

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中,临时表不能在同一查询中使用两次。我的第二个想法是使用外部联接,但是不重用临时表的问题也出现了。
你能建议一个可行的方法吗?

5fjcxozz

5fjcxozz1#

如果我理解正确,您还希望包括没有与内部查询限制匹配的操作的用户,在这种情况下,您可以使用left join,当actioncount为null时,替换为零,如下所示:

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;

相关问题