使用 group by 进行 SQL 连接的 HQL 版本

2023-11-23

我有两张表:Band 和 Votes。 Band 有一个名称和一个 id,Votes 有一个 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 and Votes(实际上,在使用 HQL 和/或 Criteria API 时提供对象模型非常有帮助,因为您正在查询对象模型)。

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

14.12。 group by 子句

返回聚合值的查询 可以按 a 的任何属性进行分组 返回的类或组件:

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

也允许使用having 子句。

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 函数和聚合函数 允许在拥有和订购 条款,如果它们得到支持 底层数据库(即不在 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也没有 目前正在扩展一个分组实体,所以 如果全部都不能写 group by cat cat 的属性是非聚合的。 您必须列出所有非聚合的 明确的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 group by 进行 SQL 连接的 HQL 版本 的相关文章

随机推荐

  • 即使支持 HTML5 视频,浏览器也会加载 HTML5 后备图像

    我有一些带有动画 GIF 的 HTML5 视频作为后备 遗憾的是 尽管支持 HTML5 视频 但 GIF 仍在加载 在不使用 javascript 的情况下 有没有办法阻止浏览器下载 HTML5 后备内容 如果没有 我只会使用 jquery
  • 如何用诅咒显示预着色字符串?

    我正在用Python 编写一个curses 程序 我是诅咒的初学者 但我使用终端控制序列进行彩色输出 现在有一些代码片段要在窗口内打印 我希望它们的语法突出显示 并且最好使用像 pygments 这样的库来完成 它使用控制序列输出突出显示的
  • 为什么 PowerShell(带有 Perl)要删除简单 print 语句中的双引号?

    我是 Linux 的长期用户 但对 Windows 和 PowerShell 还很陌生 我刚刚第一次安装Windows7和Strawberry Perl 5 我现在想使用 Windows PowerShell 进行简单的命令行打印 看起来
  • cx_Freeze 导致 Python 3.7.0 崩溃

    cx Freeze 6 0b1 最新版本 是否支持 Python 3 7 0 我刚刚创建了一个简单的项目 它适用于 Python 3 5 4 但不适用于 Python 3 7 0 它显示 Python 致命错误 initfsencoding
  • TestNG 可以看到我的 Spock (JUnit) 测试结果吗?

    需要让 TestNG 来运行我的 Spock 测试 因为 TestNG 在系统的其余部分中使用 由于 TestNG 支持运行 JUnit 测试 我尝试了以下方法
  • 如何调试“安全句柄已关闭”错误

    我继承的代码不断崩溃 并出现以下错误 根本没有改变 System ObjectDisposedException Safe handle has been closed at Microsoft Win32 UnsafeNativeMeth
  • Spring bean 范围。单例和原型

    假设有两个类ClassA和ClassB 假设 ClassB 依赖于 ClassA 在配置文件中 如果我们将 ClassA 的范围定义为单例 将 ClassB 的范围定义为 Prototype 那么每次创建 ClassA 的 bean 实例时
  • ES2021 (ES12) 中的 WeakRef 和终结器是什么

    我想了解什么是WeakRef和终结器ES2021 with a 真正的简单例子 and Where使用它们 I know WeakRef是一个类 这将允许开发人员创建对对象的弱引用 而终结器或FinalizationRegistry允许您注
  • Django 使用 Allauth 进行其余身份验证

    我已经用 Allauth 实现了 django Rest auth 如果我通过 google 登录 它工作正常access token但有一种情况 某些客户端设备需要通过谷歌登录id token 如果我使用 我会收到错误id token代替
  • 改造:如何在没有内容编码的情况下解析 GZIP 响应:gzip 标头

    我正在尝试处理 GZIP 的服务器响应 响应带有标头 Content Type application x gzip 但没有标题 Content Encoding gzip 如果我使用代理添加该标头 响应就会被很好地解析 我对服务器没有任何
  • 使用 JS 更改 svg 元素的位置

    尝试制作一个在按下按钮时移动的 svg 矩形 现在我只想通过函数修改 x function modX document getElementById rectangle transform translate 295 115 var x 2
  • 进程间通信建议[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找一种轻量级 快速且简单的方法来处理 Linux 计算机上某些程序之间的进程间通信 目前 我正在考虑命名管道 因为它是由操作系统本身提供的 关于性能或可用性有什么注意事项吗
  • 汇编语言 - 如何进行取模?

    x86 汇编中是否有类似模运算符或指令之类的东西 如果您的模数 除数是已知常数 并且您关心性能 请参阅this and this 对于直到运行时才知道的循环不变值 乘法逆甚至是可能的 例如看https libdivide com 但是如果没
  • 展开 折叠 展开 JTree 延迟加载的问题

    我已经使用延迟加载实现了一棵树 第一级节点是在创建树时创建的 而子节点仅在用户展开任何特定节点时创建 数据来自数据库 我们向数据库发出查询以填充子节点 实现了 TreeExpansionListener 并使用 treeExpanded 方
  • boost asio异步等待条件变量

    是否可以对 boost asio 中的条件变量执行异步等待 读取 非阻塞 如果不直接支持任何有关实现的提示 我们将不胜感激 我可以实现一个计时器 甚至每隔几毫秒就触发一次唤醒 但这种方法要差得多 我发现很难相信条件变量同步没有实现 记录 如
  • 正确地将 DateTime 从 C# 插入到 mongodb

    我尝试在 MongoDB 中插入当地时间 var time DateTime Now 03 05 2014 18 30 30 var query new QueryDocument time nowTime collection3 Inse
  • 为什么要使用 urlencode?

    我正在编写一个 Web 应用程序并学习如何对 html 链接进行 urlencode 这里的所有 urlencode 问题 参见下面的标签 都是 如何 问题 我的问题不是 如何 但为什么 即使维基百科的文章也只讨论了它的机制 http en
  • 移动 NumPy 数组中的所有索引

    我有一个像这样的 numpy 数组 x np array 0 1 2 3 4 想要创建一个数组 其中索引 0 中的值位于索引 1 中 索引 1 中的值位于索引 2 中 依此类推 我想要的输出是 y np array 0 0 1 2 3 我猜
  • 在命令行中制作java包

    虽然它可能是推荐使用的 IDE 来编码高级 java 项目 但我个人更喜欢几乎完全运行命令行 使用 gedit 作为文本编辑器 所以请不要只是告诉我 就用 eclipse 吧 或其他什么 P 我的问题是在java中通过命令创建包的方法是什么
  • 使用 group by 进行 SQL 连接的 HQL 版本

    我有两张表 Band 和 Votes Band 有一个名称和一个 id Votes 有一个 Total votes 列和一个名为 band id 的外键 该外键指向 band id 我有很多选票 在不同日期保存 我想要做的是找到每个频段的