Search code examples
hibernategrailsgrails-orm

Average of subquery in GORM


I have a table T with columns A & C, from which I would like to retrieve an average count like so:

select avg(AC) as AV
from
( 
 select A, count(1) as AC
 from T
 where C = 1
 group by A
)

How do I accomplish this in GORM? GRAILS version 2.2.0 I tried following the documentation but there are no good examples. I couldn't even get the subquery to work :(

Update

I was able to get the count portion to work. Still now sure how to get the average since I don't know how to select from a query.

def tc = T.createCriteria()

def tCounts = tc.buildCriteria {
    and {
        eq 'C', 1
    }
    projections {
       groupProperty 'A'
       rowCount('AC')
    }
}

Solution

  • Here is done in HQL. Tested in a grails console with one of my domains:

    T.executeQuery("""
    select avg(count(*))
    from T t
    where t.c = 1
    group by t.a
    """)