从数据库中选择多个计数

时间:2014-06-25 06:23:45

标签: mysql sql postgresql activerecord ruby-on-rails-4

我有一个User模型和一个Workplace模型。 用户具有字段性别(m / f),每个工作场所都有许多用户。 我想选择工作场所中的用户总数,以及工作场所的女性用户总数,所有这些都按工作场所名称分组。

这是我尝试过的。

User.select("workplaces.name as workplace_name, count(*), count(case when users.gender='f' then 1 else 0 end) as females").joins("INNER JOIN workplaces on 
workplaces.id=users.workplace_id").group(:workplace_name).map(&:attributes)

我使用条件选择女性用户数的第二个计数似乎不起作用。给出与第一次计数相同的结果。

查询有什么问题吗? 需要改变什么?

感谢您的回答。

更新

我用NULL替换0并且它有效。 现在我想得到男性和女性用户并进行计算 (女性 - 男性)/ 100,我如何在此查询中实现此目的。

由于

2 个答案:

答案 0 :(得分:1)

表达式case when users.gender='f' then 1 else 0 end永远不会返回NULL,这意味着COUNT会计算此表达式的所有实例,无论是1还是0

将第二个COUNT替换为SUM

答案 1 :(得分:0)

将第二个COUNT替换为SUM,如下所示

User.select("workplaces.name as workplace_name, COUNT(*), 
SUM(case when users.gender='f' then 1 else 0 end) as females").
^^^ //Change here
joins("INNER JOIN workplaces on workplaces.id=users.workplace_id").
group(:workplace_name).map(&:attributes);