我有两个表,乐队和投票。Band有一个名称和一个ID,Vote具有total_votes列和一个称为band_id的外键,它指向band.id。
我有很多票,保存在不同的日期。我想做的是找到每个频段的total_votes列的最大值。以下SQL查询有效:
select b.name,max(v.total_votes) as total from band b, votes v where b.id=v.band_id group by b.name order by total desc;
不过,我正在使用的系统使用的是Hibernate。我想将该SQL查询重新编写为HQL或Hibernate条件查询。
这容易吗,我只是想念它?谢谢你的帮助。
在HQL中,您可以尝试一下:
select band.name, max(vote.totalVotes) from Band band join band.votes vote group by band.name order by max(vote.totalVotes) desc
这是假设之间存在一个一对多的关联Band和Votes(实际上,提供对象模型HQL和/或标准API,因为要查询的对象模型工作时非常有用)。
Band
Votes
以防万一,这是文档的相关部分:
[14.12。group by子句](http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql- grouping) 返回聚合值的查询可以按返回的类或组件的任何属性进行分组: select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color select foo.id, avg(name), max(name) from Foo foo join foo.names name group by foo.id 还可以使用Have子句。 select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color having cat.color in (eg.Color.TABBY, eg.Color.BLACK) 如果基础数据库支持SQL函数和聚合函数,则它们的Have和order by子句中允许使用它们(即,MySQL中不支持)。 select cat from Cat cat join cat.kittens kitten group by cat.id, cat.name, cat.other, cat.properties having avg(kitten.weight) > 100 order by count(kitten) asc, sum(kitten.weight) desc group by子句和order by子句都不能包含算术表达式。Hibernate当前也不会扩展分组的实体,因此,如果未聚合cat的所有属性,则无法按cat编写group。您必须明确列出所有未聚合的属性。
by子句](http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql- grouping)
返回聚合值的查询可以按返回的类或组件的任何属性进行分组:
select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color select foo.id, avg(name), max(name) from Foo foo join foo.names name group by foo.id
还可以使用Have子句。
select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color having cat.color in (eg.Color.TABBY, eg.Color.BLACK)
如果基础数据库支持SQL函数和聚合函数,则它们的Have和order by子句中允许使用它们(即,MySQL中不支持)。
select cat from Cat cat join cat.kittens kitten group by cat.id, cat.name, cat.other, cat.properties having avg(kitten.weight) > 100 order by count(kitten) asc, sum(kitten.weight) desc
group by子句和order by子句都不能包含算术表达式。Hibernate当前也不会扩展分组的实体,因此,如果未聚合cat的所有属性,则无法按cat编写group。您必须明确列出所有未聚合的属性。