2012-11-19 33 views
1

簡單的一個 - 什麼是Grails的/格姆得到,因爲這SQL查詢同樣的效果的最佳方法:格姆等同於SQL

SELECT YEAR(日期)作爲SalesYear, MONTH(日期)作爲SalesMonth, SUM(價格)AS TotalSales 銷售 GROUP BY YEAR(日期),MONTH(日期) ORDER BY YEAR(日期),MONTH(日期)

+0

您可以使用HQL,看到的executeQuery。 –

+0

對不起,這並沒有多大幫助 - 有點像說,你可以使用Java - 見javadoc ... – user1609258

+0

那麼,Grails文檔不僅僅是一個javadoc,我認爲這不是一個很好的例子,但我回答了你的問題質疑並指出消息來源。 –

回答

2

域類的executeQuery方法允許你運行HQL查詢。

如果你看一些例子,你會注意到Hibernate Query Language記得很多SQL,但是是面向對象的。

從Grails的文檔:

executeQuery方法允許任意HQL查詢的執行。 當查詢選擇單個字段或計算值時,HQL查詢可以返回域類實例或指定的 數據的數組。

因此,在您的情況下,查詢將返回指定數據的數組,因爲不匹配域類,但您將能夠遍歷此數據。

假設你映射你的銷售表作爲銷售領域類:

class Sales { 
    Date date 
    BigDecimal price 
    ... 
    static mapping = { 
    ... 
    } 
} 


def result = Sales.executeQuery("SELECT YEAR(date) as SalesYear, MONTH(date) as SalesMonth, SUM(Price) AS TotalSales FROM Sales GROUP BY YEAR(date), MONTH(date) ORDER BY YEAR(date), MONTH(date)") 

//iterate over the result 
result.each { sales -> 
    println sales[0] //year 
    println sales[1] //month 
    println sales[2] //total 
} 
+0

幫了很多 - 謝謝! – user1609258