在一个查询中获取同一表中的总计数和创建后计数。

问题描述 投票:0回答:1

我有一个团队,而团队有很多团队_用户,我想获得团队的总用户数& 过去30天内为团队创建的用户数。

我试过下面的方法,但得到的数字都是一样的。

Team.joins(:teams_users)
    .select("teams.id, COUNT(teams_users.id) as total_users, COUNT( CASE WHEN teams_users.created_at > #{Date.today -
30.days} THEN 1 END) AS joined_in_month")
    .group('teams.id').map(&:attributes)

产出

[640] {
                 "id" => 688,
        "total_users" => 3,
    "joined_in_month" => 3
},
[641] {
                 "id" => 689,
        "total_users" => 2,
    "joined_in_month" => 2
},
[642] {
                 "id" => 690,
        "total_users" => 1,
    "joined_in_month" => 1
}

有谁知道我哪里做错了。

mysql ruby-on-rails ruby-on-rails-5
1个回答
0
投票

我想你要使用 SUM 而不是 COUNT 在第二部分。假设每一行都有单行的 userteamteams_users 那么你就应该用这样的查询方式。

SELECT
   tu.teams_id,
   COUNT(0) AS total_users,
   SUM(tu.created_at > (CURRENT_DATE - INTERVAL 30 DAY)) AS joined_in_month
FROM teams_users tu
GROUP BY tu.teams_id
;
© www.soinside.com 2019 - 2024. All rights reserved.