Grails Criteria - 同一领域的多个功能
Grails Criteria - multiple functions on same field
我知道我可以在 Criteria 中使用 mysql 函数,如下所示:
Number rating = Book.createCriteria().get
eq("author", author)
projections {
max rating
}
}
执行相当于
select max(rating) from book where author = 'authors name';
但是如果这个评分可以是正面的也可以是负面的,我想要绝对最大值,是否可以在Criteria中执行以下操作:
select max(Abs(rating)) from book where author = 'authors name'
也许我需要恢复到 HQL,但只是想看看我是否可以先做这件事。
或者简单地说 SQL:
def rating = new groovy.sql.Sql(datasource).firstRow("select max(Abs(rating)) rating from book where author = ${author.name}")?.rating
我认为最简洁的方法是在 Book
class:
中添加一个公式
class Book {
Integer rating
Integer absRating
...
static mapping = {
absRating formula: 'ABS(RATING)'
}
}
然后在您的标准内使用 absRating
:
Number rating = Book.createCriteria().get
eq("author", author)
projections {
max absRating
}
}
Link: Derived Properties
就个人而言,我会将其重写为 HQL
def result = Book.executeQuery(
"select max(abs(rating)) from Book where author = :author", [author: author])
您可以通过 sqlRestriction
在标准查询的谓词中使用 SQL,但我认为在 projections
中使用它们是不可能的。
我知道我可以在 Criteria 中使用 mysql 函数,如下所示:
Number rating = Book.createCriteria().get
eq("author", author)
projections {
max rating
}
}
执行相当于
select max(rating) from book where author = 'authors name';
但是如果这个评分可以是正面的也可以是负面的,我想要绝对最大值,是否可以在Criteria中执行以下操作:
select max(Abs(rating)) from book where author = 'authors name'
也许我需要恢复到 HQL,但只是想看看我是否可以先做这件事。
或者简单地说 SQL:
def rating = new groovy.sql.Sql(datasource).firstRow("select max(Abs(rating)) rating from book where author = ${author.name}")?.rating
我认为最简洁的方法是在 Book
class:
class Book {
Integer rating
Integer absRating
...
static mapping = {
absRating formula: 'ABS(RATING)'
}
}
然后在您的标准内使用 absRating
:
Number rating = Book.createCriteria().get
eq("author", author)
projections {
max absRating
}
}
Link: Derived Properties
就个人而言,我会将其重写为 HQL
def result = Book.executeQuery(
"select max(abs(rating)) from Book where author = :author", [author: author])
您可以通过 sqlRestriction
在标准查询的谓词中使用 SQL,但我认为在 projections
中使用它们是不可能的。