MYSQL 查找每月有多少用户进行了交易

MYSQL Finding how many users transacted per month

我的任务是找出 2020 年每个月有多少用户进行了交易 我知道我有两个表可以使用。

Table Name: Receipts|Columns: receipt_id, collection_id, user_id, amount
Table Name: Games |Columns: game_id, collection_id, game_date_time

我试过了,但我认为它没有意义或不起作用

select  month(games.game_date_time) AS Month, sum(receipts.id) from bills
join games on bills.collection_id =  games.collection_id
WHERE YEAR(games.game_date_time) = 2020 
group by receipts.user_id, month(games.game_date_time)  
order by month(games.game_date_time)

使用 COUNT() 获取计数,而不是 SUM()。如果你想计算用户数,而不是对同一个用户进行两次计数,请使用 COUNT(DISTINCT user_id),不要将 user_id 放在分组中。

SELECT MONTH(g.game_date_time) AS month, COUNT(DISTINCT r.user_id) AS users
FROM receipts AS r
JOIN games AS g ON r.collection_id = g.collection_id
WHERE YEAR(g.game_date_time) = 2020
GROUP BY month
ORDER BY month

find how many users performed a transaction in every month in 2020

SELECT COUNT(r.user_id)
FROM receipts AS r
JOIN games AS g USING (collection_id)
WHERE YEAR(g.game_date_time) = 2020
GROUP BY r.user_id
HAVING COUNT(DISTINCT MONTH(g.game_date_time)) = MONTH(CURRENT_DATE)

这个查询:

  1. 仅选择当年的行。
  2. 对于每个用户 - 计算该用户不同月份的付款金额,并与当前月份进行比较。如果用户每个月都有付款(包括当前!),则这些值相等。
  3. 计算符合此条件的用户数量。

PS。查询将在 2021 年失败 - 为了在未来使用时接收正确的信息

HAVING COUNT(DISTINCT MONTH(g.game_date_time)) = CASE YEAR(CURRENT_DATE)
                                                 WHEN 2020
                                                 THEN MONTH(CURRENT_DATE)
                                                 ELSE 12
                                                 END