簡単なもの - Grails/Gorm でこの SQL クエリと同じ効果を得るための最良の方法は何ですか?
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)
簡単なもの - Grails/Gorm でこの SQL クエリと同じ効果を得るための最良の方法は何ですか?
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)
ドメイン クラスのexecuteQueryメソッドを使用すると、 HQLクエリを実行できます。
いくつかの例を見ると、Hibernate Query Languageは多くの SQL を記憶しているが、オブジェクト指向であることに気付くでしょう。
Grails ドキュメントから:
executeQuery メソッドを使用すると、任意の HQL クエリを実行できます。HQL クエリは、クエリが個々のフィールドまたは計算値を選択するときに、ドメイン クラス インスタンス、または指定されたデータの配列を返すことができます。
したがって、あなたの場合、ドメインクラスと一致しないため、クエリは指定されたデータの配列を返しますが、このデータを反復処理できます。
sales テーブルを Sales ドメイン クラスとしてマッピングしたと仮定します。
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
}