2012-11-19 28 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