简单一点 - Grails / Gorm中获得与此SQL查询相同效果的最佳方法是什么:
SELECT YEAR(date)as SalesYear, MONTH(日期)为SalesMonth, SUM(价格)AS TotalSales 来自销售 GROUP BY年(日期),月(日期) 按年份排序(日期),月份(日期)
答案 0 :(得分:2)
域类的executeQuery方法允许您运行HQL个查询。
如果你看一些例子,你会注意到Hibernate Query Language记得很多SQL,但是面向对象。
来自Grails文档:
executeQuery方法允许执行任意HQL查询。 HQL查询可以返回域类实例或指定的数组 查询选择单个字段或计算值时的数据。
因此,在您的情况下,查询将返回指定数据的数组,因为不与域类匹配,但您将能够迭代此数据。
假设您将sales表映射为Sales domain class:
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
}