Question

HQL Query: Sum the result of an aggregate function like avg()

Asked by: justsomeguy1

How can I modify an HQL Query to sum the result of a subquery? For example, The query below gives me a list of average ratings, but what I would like to do is get the sum of that list, and every attempt has been met with org.hibernate.hql.ast.QuerySyntaxException: unexpected token

// working inner query
select avg(vote.rating) from Vote vote
 
// failed attempts at summing
select sum(averages) from (select avg(vote.rating) as averages from Vote vote)
select sum(avg(vote.rating)) from Vote vote

                                  
1:
2:
3:
4:
5:
6:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-04-29 at 12:32:44ID24366812
Tags

HQL

,

aggregate

,

subquery

,

avg()

,

sum()

Topics

Databases Miscellaneous

,

SQL Query Syntax

Participating Experts
3
Points
500
Comments
16

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. T-SQL stored procedure - "Cannot perform an aggregat…
    Hi, I am writing a query to return an resultset as follows: select Weldment = p.partName, NbrProduced = sum(p.qtyExpected), Batches = sum(1), AvgWeldTime = AVG(DATEDIFF(hh, (SELECT TOP 1 transactiontime trans FROM vtransaction t2 WHERE t2.partid = t.p...
  2. Correlated subqueries
    Hi, For a work I'm doing, (not a homework at all!), I need 3 samples about correlated queries that cannot be reexpressed as joins. As you surely know, must of the subqueries can be re-written in order to avoid them. Also even correlated queries could be re-expressed, too. Ho...
  3. Java: Syntax error on token "(", ";" expected  for …
    I cannot find a way to compile the java prog below: The problem is with the field "avg". I'm just trying to averag out some test scores. Thank you for your time in advance.. import java.text.*; import java.util.*; public class Average{ public static void main(Str...
  4. unexpected token
    I would like to retrieve count of the rows in ScanPT table. I wrote this query in Hibernate console and got the result 2. When i use it in my Java code it throws me ERROR org.hibernate.hql.PARSER - line 1:182: unexpected token: q Can you tell me what iam doing wrong ? publ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: louislietaerPosted on 2009-04-29 at 12:44:21ID: 24263991

Are you sure you want the sum of averages, if not

select sum(vote.rating) from Vote Vote

 

by: louislietaerPosted on 2009-04-29 at 12:48:27ID: 24264024

Anyway "select avg(vote.rating) from Vote vote" will return 1 row, and sum of 1 row has no sense !

 

by: mwvisa1Posted on 2009-04-29 at 12:48:53ID: 24264029

This should return 1 value:

select avg(vote.rating) from Vote vote

Since you have no group by statement, that will average all rating values for the entire table together; therefore, wouldn't make sense to need a sum after the fact.

Don't believe you can use two aggregates together, so your derived table looks like the right approach from a SQL syntax perspective.  Just have to alias the derived table -- at least that would be the issue if running in against database directly.  May have other issues in HQL.

select sum(t.averages) from (select avg(vote.rating) as averages from Vote vote) as t

 

by: justsomeguy1Posted on 2009-04-29 at 12:48:53ID: 24264030

Yes I'm not looking for the sum of all ratings, I'm trying to get the sum of the averages of all ratings

 

by: justsomeguy1Posted on 2009-04-29 at 12:53:46ID: 24264073

Sorry I had omitted the groupBy clause to try and make it simple, but you are right without it this particular example doesn't make sense. The actual query will have the groupby clause.

I tried your alias idea in the HQL and crossed my fingers, but I am still seeing the unexpected token exception. Here is the full query I tried:

select sum(t.averages) from (
select avg(vote.rating) as averages from Vote vote, Story story where story.id = vote.objectId group by vote.objectId ) as t

 

by: mwvisa1Posted on 2009-04-29 at 12:54:20ID: 24264077

But that is the point.  If you average all the ratings, you will get one number.

rating1 = 100
rating2 = 75
rating3 = 90
rating4 = 85

Result of your initial SQL query should be 87.5.

Taking a sum of that gives you 87.5.  Doesn't make sense to do that unless you are getting multiple values somehow which would mean your initial query is not as simple as shown which may contribute to the error you are getting; therefore, please post actual query.

Otherwise, as stated, I know there are issues with using derived table without giving it an alias as I showed.

 

by: louislietaerPosted on 2009-04-29 at 12:55:52ID: 24264097

Explain what is a rating (in the context)

 

by: justsomeguy1Posted on 2009-04-29 at 12:59:57ID: 24264136

A story may have multiple votes, a vote has a rating from 1 to 5, so in the scenario:

Story, Rating
1, 5
1, 5
2, 1
2, 3

The result I am looking for would be 9, (5 + 4). My inner query returns a List of 5 and 4 so far

 

by: mwvisa1Posted on 2009-04-29 at 13:00:37ID: 24264141

That looks ok from a SQL syntax perspective aside from the join statement I would suggest using ANSI compliant join.

select sum(t.averages) as sum_of_averages
from (
select avg(vote.rating) as averages
from Vote vote
inner join Story story on story.id = vote.objectId
group by vote.objectId
) as t

Will have to take a step back and think about what the HQL error message you are getting is referring to with invalid token message.

 

by: mwvisa1Posted on 2009-04-29 at 13:04:34ID: 24264183

Try with this SQL:

select sum(v.ratingAvg) as sumOfAverages
from Story s
inner join (
	select objectId, avg(rating) as ratingAvg
	from Vote
	group by objectId
) v on s.id = v.objectId

                                              
1:
2:
3:
4:
5:
6:
7:

Select allOpen in new window

 

by: louislietaerPosted on 2009-04-29 at 13:05:55ID: 24264195

Can you please send us the definition of the table Vote ?

 

by: justsomeguy1Posted on 2009-04-29 at 13:19:05ID: 24264331

Vote has id, objectId, and rating.

Unfortunately, a lot of the suggested queries work fine in a mysql client, but I am bound to HQL in my application. Thats why I tried to make the initial question simpler, the real problem is how I can use two aggregate functions through correct HQL syntax.

 

by: mwvisa1Posted on 2009-04-29 at 13:34:58ID: 24264471

The other thing you can try is to use Hibernate to get the initial resultset with average value per story, then in java code sum the values as you read through the results.

 

by: justsomeguy1Posted on 2009-04-29 at 13:36:26ID: 24264486

This is actually what I am doing as a working around mwvisa, its just terribly innefficient because the list of results is huge and it gets hit very often.

 

by: cmaslenPosted on 2009-04-30 at 05:21:35ID: 24269086

HQL doesn't support the equivalent of a nested table expression that is available in most SQL databases. You'll have to execute a SQL statement via the createSQLQuery method from the hibernate Session object. If you stick with SQL-92 SQL syntax you should be fine supporting multiple databases if this is why you have to use HQL.

More info at the following link:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/querysql.html

Christian.

 

by: justsomeguy1Posted on 2009-04-30 at 08:44:55ID: 31576126

Not the solution I was hoping for but always limitations in life ha, thank you both

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...