当前位置: 首页 > 面试题库 >

SQL的HQL版本与group by联接

孙德本
2023-03-14
问题内容

我有两个表,乐队和投票。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

这是假设之间存在一个一对多的关联BandVotes(实际上,提供对象模型HQL和/或标准API,因为要查询的对象模型工作时非常有用)。

以防万一,这是文档的相关部分:

[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。您必须明确列出所有未聚合的属性。



 类似资料:
  • 我有以下mysql查询: 我已经编辑了我的问题,以添加我正在使用的两个实体。第一个实体包含频率,我想要加入从另一个实体选择的项目。TFrequency表有一个不变的常量值。这个频率使用ID映射到tEXCELSMSTOSENDSchedule实体。但是,我希望从tfrequence中选择name,而不是映射的id。然后我用它来填充我的数据表。我需要创建第三个实体吗?我不知道这是如何工作的,我一直在尝

  • 问题内容: 我正在使用带有节点6.3.1的打字稿2.2的nodejs项目,我想从使用类型迁移到使用@types。通过这样做,我遇到了一系列与@types文件的版本和相应的npm包之间是否存在关系有关的问题。 如果我以茉莉花为例,则类型定义的现有版本为 但是,如果我检查一下茉莉花包装的版本, 假设我正在使用2.4.0版的茉莉花,应该选择哪个版本的@ types / jasmine?因为即使我使用了两

  • 我试图在一列内连接两个表。从数据库方面来看,没有映射,因为这是我不想讨论的事情。 我想使用内部联接执行HQL查询并检索角色对象/结果。 这是到目前为止我的hql 一场createQuery(“从角色作为角色内部加入参与作为角色上的参与。id=invention.roleid,其中invention.id=X”)。list(); 我看到在HQL上不可用。如何明确地告诉Hibernate仅加入此列。

  • 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我尝试用多种方法构建工作选择查询,但仍然不起作用。 也许实体有问题?

  • 问题内容: 我确定会找到重复的问题或令人满意的答案,但我没有。 我正在寻找以下问题的答案: Java EE / J2EE和J2SE / JDK版本之间有官方关联吗? 如果答案是肯定的,它写在哪里? 如果答案是否定的,那为什么呢?并且有一个非官方的版本表(例如,JDK 1.4与J2EE 1.3配合得很好,JDK 1.5与J2EE 1.4配合得很好,JDK 1.6与Java EE 5配合得很好) 我可