【问题标题】:Active record group by two separate values由两个单独的值组成的活动记录组
【发布时间】:2016-04-04 20:39:42
【问题描述】:

我有一个名为Documents 的表,看起来(部分)如下所示。有一个文档 ID、一个文件类型和一个 user_id。

id     type  user_id
1      PDF    1 
2      PDF    1 
3      PDF    2 
4      PDF    3 
5      JPG    1 
6      JPG    3 
7      JPG    3 
8      JPG    3 
9      JPG    1
10     PNG    2 
11     PNG    2

我要做的是计算有多少用户上传了每种不同的文件类型。所以鉴于上面的数据......我想要一些类似的东西:

{"PDF" => 3, "JPG" => 2, "PNG" => 1}

意味着 3 个不同用户上传了 PDF,2 个不同用户上传了 JPG,等等。

我尝试做 Document.group(:user_id).group(:type).count 但这给了我一个巨大的哈希值,每个 user_id/type 组合都有一个计数......

【问题讨论】:

  • @lad2025 将其添加为答案,我会将其标记为解决方案。谢谢!!

标签: sql ruby-on-rails ruby activerecord


【解决方案1】:

使用纯 SQL:

SELECT type, COUNT(DISTINCT user_id) AS cnt 
FROM Documents 
GROUP BY type;

LiveDemo

【讨论】:

  • 这是在 SQL 中实现的方式。
【解决方案2】:

你可以这样做

Document.select('distinct user_id').group(:type).count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多