选择计算SQL的正/负值

时间:2014-06-25 08:38:21

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

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

这是我尝试过的。

User.select("workplaces.name as workplace_name, count(*) as FTE, (count(case when   users.gender='m' and users.created_at BETWEEN date_trunc('month', now()) and now() then 1   end)::float - count(case when users.gender='f' and users.created_at BETWEEN   date_trunc('month', now()) and now() then 1 else null end)::float)/100 as ratio").joins("INNER   JOIN workplaces on workplaces.id=users.workplace_id").group(:workplace_name).order("ratio    desc").limit(5).map(&:attributes)

以上查询获取工作场所中的男性和女性用户并计算(女性 - 男性)/ 100。 我将比率作为正值和负值。

如何仅选择计算比率的正值/负值

由于

1 个答案:

答案 0 :(得分:1)

您可以在此处使用HAVING子句,因为它接受任何表达式,而不仅仅是列,例如:

HAVING (expr_for_ratio) > 0

SQLFiddle

此外,您可以在此处使用子查询,但在rails'api中写下来会很复杂。