选择计算 SQL 的正/负值

Posted

技术标签:

【中文标题】选择计算 SQL 的正/负值【英文标题】:Selecting Positive/Negative Values of a computation SQL 【发布时间】:2014-08-15 17:39:04 【问题描述】:

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

这是我尝试过的。

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。 我得到比率作为正值和负值。

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

谢谢

【问题讨论】:

到目前为止,我从计算的比率中得到了正值和负值。如何只选择正比率值? ABS? HAVING? postgresql.org/docs/current/static/sql-select.html#SQL-HAVING @pozs 可以使用。但是比率不是表格上的字段/列。那么如何使用呢?拥有(“比率> 0”)不起作用 没有 negative ratio 这样的东西。也没有理由将一个比率除以 100。如果你想要一个 比率,那就是female/male。如果您想要百分比,则为female/totalEmployees。你要哪个?它看起来接近百分比差异,但也不适合。 【参考方案1】:

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

HAVING (expr_for_ratio) > 0

SQLFiddle

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

【讨论】:

以上是关于选择计算 SQL 的正/负值的主要内容,如果未能解决你的问题,请参考以下文章

ABAP选择屏幕字段无法输入负值

ABAP选择屏幕字段无法输入负值

如何计算两个日期之间的月数和天数,而不在 SQL Server 中返回负值

Xcode:(用户定义的运行时属性)带负值的范围。选择?

bellman-ford算法求单源点最短路径边的权值为啥可以为负值?遍历代价存在负值吗?

它们是一个 SQL 函数,可以使用下面的查询给我一个负值和正值吗?