sql - 事件记录按两个单独的值分组

标签 sql ruby-on-rails ruby activerecord

我有一个名为 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 的巨大散列 带有计数的组合...

最佳答案

使用纯 SQL:

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

LiveDemo

关于sql - 事件记录按两个单独的值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36412462/

相关文章:

ruby-on-rails - 在新浏览器选项卡中打开的 PDF 文档中创建链接

php - 查询未正确运行

SQL合并两列的值作为主键

ruby-on-rails - 如何 catch Rails 站点的测试

ruby-on-rails - Rails 4,设计记住 token

ruby-on-rails - 如何在 rails 中使用 like 子句查询?

ruby - PGError : ERROR: relation "companies" does not exist( postgresql , mysql, rails 3)

java.sql.SQLException : invalid column index

sql - 使用 SQL 选择接下来 5 年每个月的同一天?

jquery - 如何将 ruby​​ 变量传递给 jquery