我有一个团队,而团队有很多团队_用户,我想获得团队的总用户数& 过去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
}
有谁知道我哪里做错了。
我想你要使用 SUM
而不是 COUNT
在第二部分。假设每一行都有单行的 user
每 team
在 teams_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
;