1

簡単なもの - 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)

4

1 に答える 1

2

ドメイン クラスの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
}
于 2012-11-20T02:09:48.620 に答える