Rails Active Record Mysql查找查询HAVING子句

时间:2010-04-10 19:37:31

标签: mysql ruby-on-rails

有没有办法在不使用group by的情况下以其他方式使用HAVING子句。

我正在使用rails并且以下是我面临的问题的示例场景。在rails中,您可以使用Model.find(:all,:select,conditions,:group)函数来获取数据。在此查询中,我可以在:group param中指定having子句。但是,如果我没有group by子句但希望在结果集中有一个having子句,那该怎么办呢。

Ex:让我们进行查询

从y中选择sum(x)为a,b,c,其中“some_conditions”分组为b,c;

此查询在其中一个字段上有一个sum()聚合。不,如果没有什么要聚合,那么我的结果应该是空集。但是mysql返回一个NULL行。所以这个问题可以通过使用

来解决

从y中选择sum(x)为a,b,其中“some_conditions”组由b表示NOT NULL;

但是如果我没有group by子句会发生什么?如下所示的查询

选择sum(x)作为a,b从y中“some_conditions”;

那么如何指定sum(x)不应该为NULL?

任何在这种情况下返回空集而不是NULL行的解决方案都会有所帮助,而且该解决方案应该在rails中可行。

我们可以使用子查询来使这个条件像这样使用sumthin

select * from((select sum(x)as b FROM y where“some_condition”)as subq)其中subq.b不为null;

但是有更好的方法通过sql / rails吗?

1 个答案:

答案 0 :(得分:0)

子查询是在SQL中处理这种情况的标准方法。但是,我建议您不要使用子查询或HAVING,而是检查SUM(x)是否为NULL。最好总是返回一个结果,这样你就不必检查是否有一个结果。如果值为NULL,则表示没有包含NON NULL值的记录。

有一点你没有提到,如果你不想将sum(x)设为null,那么你可以这样做:

SELECT IFNULL(SUM(x), 0) AS a FROM table