2010-04-10 134 views
0

有沒有辦法在不使用group by的情況下以某種其他方式使用HAVING子句。Rails活動記錄Mysql查詢查詢HAVING子句

我使用軌道和下面是我面臨的問題的一個樣本sccenario。在rails中,您可以使用Model.find(:all,:select,conditions,:group)函數來獲取數據。在這個查詢中,我可以在:group param中指定having子句。但是如果我沒有一個group by子句但想在結果集中有一個having子句呢?

例如:讓我們查詢

SELECT SUM(X),其爲,B,C從y,其中 「some_conditions」 組由B,C;

此查詢在其中一個字段上具有sum()聚合。沒有,如果沒有什麼要聚合,那麼我的結果應該是一個空集。但是mysql返回一個NULL行。所以這個問題可以通過使用

SELECT SUM(X)爲a,b從y,其中 「some_conditions」 基團由b。具有NOT NULL來解決;

但如果我沒有group by子句會發生什麼?像下面

SELECT SUM(X)爲a,b從y,其中 「some_conditions」 的查詢;

因此如何指定金額(x)的不應該是NULL?

會在這種情況下,而不是一個空行返回一個空集的任何解決方案將幫助,也該解決方案應該是可行的軌道。

我們可以使用子查詢得到這個條件與sumthin這樣工作

SELECT * FROM((SELECT SUM(X)爲B與Y,其中 「some_condition」)作爲SUBQ),其中subq.b不爲空;

,但有沒有更好的辦法來做到這一點直通SQL /軌道?

回答

0

子查詢來處理SQL這種情況的標準方式。不過,我建議你不要使用子查詢或HAVING,而是檢查是否SUM(x)爲NULL。這是最好的總是返回一個結果,這樣你就不必檢查,看看是否有一個或沒有。如果該值爲NULL,那麼你知道有非NULL值的任何記錄。你沒有提到,如果你不想總和(X)爲空

一兩件事,那麼你可以這樣做:

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

@marcus斯 - 的作品!謝謝! – meetraghu28 2010-04-12 10:18:51