[英]Rails Active Record Mysql find query HAVING clause
有沒有一種方法可以使用其他方式使用HAVING子句而無需使用group by。
我正在使用Rails,以下是我所面臨的問題的示例場景。 在rails中,您可以使用Model.find(:all,:select,conditions,:group)函數獲取數據。 在此查詢中,我可以在:group參數中指定一個having子句。 但是,如果我沒有group by子句但想要在結果集中有一個hading子句怎么辦。
例如:讓我們查詢
從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子句怎么辦? 如下查詢
在“ some_conditions”中從y中選擇sum(x)作為a,b;
所以如何指定sum(x)不應該為NULL?
在這種情況下將返回空集而不是NULL行的任何解決方案都將有所幫助,並且該解決方案也應在rails中可行。
我們可以使用子查詢來使這種條件與sumthin一起工作,如下所示
選擇* from((將sum(x)選擇為b FROM y,其中“ some_condition”作為subq),其中subq.b不為null;
但是通過sql / rails有沒有更好的方法呢?
子查詢是在SQL中處理這種情況的標准方法。 但是,我建議您不要使用子查詢或HAVING,而應檢查SUM(x)是否為NULL。 最好總是返回一個結果,這樣就不必檢查是否有結果。 如果該值為NULL,則您將知道沒有帶有NULL值的記錄。
您沒有提到的一件事,如果您不希望sum(x)為null,則可以執行以下操作:
SELECT IFNULL(SUM(x), 0) AS a FROM table
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.