Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPQL avg聚合函数与整数一起工作吗?

我有一个叫外科的JPA 2实体。它有一个名为transfusionUnits的成员,它是一个整数。

数据库中有两个条目。执行此JPQL语句:

代码语言:javascript
运行
AI代码解释
复制
Select s.transfusionUnits from Surgery s

产生预期结果:

代码语言:javascript
运行
AI代码解释
复制
2
3

下面的语句生成5的预期答案

代码语言:javascript
运行
AI代码解释
复制
Select sum(s.transfusionUnits) from Surgery s

我希望下面这个语句的答案是2.5,但是它返回2.0

代码语言:javascript
运行
AI代码解释
复制
Select avg(s.transfusionUnits) from Surgery s

如果我在另一个(浮动)成员上执行语句,则结果是正确的。对为什么会发生这种事有什么想法吗?我需要在JPQL中做一些演员吗?这有可能吗?当然,我错过了一些琐碎的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-07 13:42:17

首先,让我总结一下JPA2.0规范对AVG的看法(有关全部内容,请参阅SELECT条款中的4.8.5节)

AVG函数以状态字段路径表达式作为参数,并计算组中sate字段的平均值。状态字段必须是数字字段,并且结果返回为双倍。

因此,在第一次阅读之后,我希望下面的片段能够通过:

代码语言:javascript
运行
AI代码解释
复制
Query q = em.createQuery("select avg(s.transfusionUnits) from Surgery s");
Double actual = (Double) q.getSingleResult();
assertEquals(2.5d, actual.doubleValue());

但它没有,我得到了2.0作为结果(双倍,但不是预期的结果)。

因此,我查看了数据库级别,并意识到SQL查询实际上没有返回2.5。事实上,这就是我的数据库中关于AVG的文档:

平均值(平均值)如果未选中任何行,则结果为NULL。只有在select语句中才允许聚合。返回的值与参数具有相同的数据类型。

我期待太多了。JPA将以双倍的形式返回结果,但它不会有任何魔力。如果查询没有以所需的精度返回结果,则无法在Java级别获得结果。

因此,在不更改transfusionUnits类型的情况下,我必须运行这个本机查询才能正常工作:

代码语言:javascript
运行
AI代码解释
复制
Query q = em.createNativeQuery("SELECT AVG(CAST(s.transfusionUnits as double)) from Surgery s");
Double actual = (Double) q.getSingleResult();
assertEquals(2.5d, actual.doubleValue());

更新:--在INT列上使用AVG时,某些数据库(例如MySQL)确实返回带有十进制部分的值(这是有意义的,而不管我在这里使用的数据库的记录行为如何)。对于其他数据库,上述转换可以用“方言”(例如,参见Hibernate的HHH-5173 )来处理,以避免使用JPQL时数据库之间的可移植性问题。

票数 10
EN

Stack Overflow用户

发布于 2011-02-09 07:36:15

将平均场转换为“加倍”就可以了。不确定对性能的影响,但不应该是什么坏事:

代码语言:javascript
运行
AI代码解释
复制
Select avg(s.transfusionUnits + 0.0) from Surgery s
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2791378

复制
相关文章
SQL聚合函数 AVG
AVG返回NUMERIC或DOUBLE数据类型。 如果expression是DOUBLE类型,AVG返回DOUBLE; 否则,它返回NUMERIC。
用户7741497
2022/03/27
3.3K1
Mysql| Mysql函数,聚集函数的介绍与使用(Lower,Date,Mod,AVG,...)
转载自https://blog.csdn.net/u011479200/article/details/78633382
allsmallpig
2021/02/25
1.6K0
sql聚合函数_SQL聚合函数
SQL Aggregate Functions basically operate on multiple columns to perform the operations and serve to represent the output as an entity representing the operation executed.
全栈程序员站长
2022/06/24
2.4K0
sql聚合函数_SQL聚合函数
Hive窗口函数01-SUM、MIN、MAX、AVG
order by : 在同一个组内,先累加完相同createtime的pv,再累加其他createtime的pv, 比如 : 现在在表末尾加一条数据cookie1 2015-04-10 1 1,那么结果就是 :
CoderJed
2018/09/13
2.8K0
mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比
mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比 MongoDB 聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。 基本语法为:db.collection.aggregate( [ , , … ] ) 现在在mycol集合中有以下数据: { "_id" : 1, "name" : "tom", "sex" : "男", "score" : 100, "age
学到老
2018/03/19
1.9K0
mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比
mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比
mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比 原文连接:直通车
学到老
2019/02/14
1.7K0
SQL聚合函数
其中,column_name 是要计算总和的列名,table_name 是要查询的表名。
堕落飞鸟
2023/05/10
1K0
Oracle分析函数三——SUM,AVG,MIN,MAX,COUNT
功能描述:对一组内发生的事情进行累积计数,如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。
python与大数据分析
2022/03/11
6100
Oracle分析函数三——SUM,AVG,MIN,MAX,COUNT
【mysql】聚合函数
Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍。但好于具体的count(列名)。
兮动人
2022/03/18
3.4K0
DAX中与计数相关的聚合函数
不问花开几许,只愿浅笑安然 除了求和,另一个日常工作中最常用到的聚合方式应该是计数了。DAX提供了一系列关于计数的函数。他们可以帮助我们计算表中有多少行或者某个值出现了多少次。 DAX中包含的计数函数有: COUNT()函数,对列中值的数量进行计数,除了布尔型; COUNTA函数,对列中值的数量进行计数,包含布尔型; COUNTBLANK()函数,返回列中空单元格的计数; COUNTROWS()函数,返回表中行的计数; DISTINCTCOUNT()函数,返回列中值的不重复计数,包含空单元格。 DISTI
博文视点Broadview
2023/04/04
4.3K0
DAX中与计数相关的聚合函数
聚合函数Aggregations
通常在使用大型数据集时,你可能关注的只是近似值而不是准确值,这时可以使用 approx_count_distinct 函数,并可以使用第二个参数指定最大允许误差。
每天进步一点点
2022/07/27
1.2K0
聚合函数Aggregations
MySQL 聚合函数
聚合函数(Aggregate Function),就是将一组数据进行统一计算,得到一个单一的值。
程序媛淼淼
2022/09/01
1.2K0
MySQL 聚合函数
PQ-M及函数:数值计算(聚合函数与操作)
小勤:大海,在PowerQuery里面能不能对一列数求和、算个数、求最大、最小值之类的啊?
大海Power
2021/08/31
1.8K0
Leetcode 262. 行程和用户(avg函数的巧用)
select request_at "Day",round(avg(`status`!="completed"),2) "Cancellation Rate" from trips t join users u1 on u1.users_id=t.client_id and u1.banned="No" join users u2 on u2.users_id=t.driver_id and u2.banned="No
glm233
2021/04/08
4460
【说站】AVG杀毒 AVG AntiVirus Pro 6.50.0高级版
AVG AntiVirus Pro 帮助您防范恶意软件侵害。通过应用程序锁定器、照片库、Wi-Fi 安全扫描、应用程序权限管理器确保您的个人数据安全。
很酷的站长
2022/11/25
6750
【说站】AVG杀毒 AVG AntiVirus Pro 6.50.0高级版
ES 常用聚合函数
关于常用聚合函数,ES提供了很多,具体查看官方文档,本文在ES 聚合查询的基础上,相关测试数据也在ES 聚合查询中.
郑小超.
2022/09/21
1.1K0
SQL聚合函数 LIST
一个简单的LIST(或LIST ALL)返回一个字符串,其中包含一个逗号分隔的列表,该列表由所选行中string-expr的所有值组成。 其中string-expr为空字符串(")的行由逗号分隔列表中的占位符逗号表示。 string-expr为NULL的行不包含在逗号分隔的列表中。 如果只有一个string-expr值,并且是空字符串("),LIST返回空字符串。
用户7741497
2022/03/27
2K0
SQL聚合函数 MAX
MAX聚合函数返回表达式的最大值。 通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。
用户7741497
2022/03/27
1.2K0
SQL聚合函数 COUNT
COUNT可以在引用表或视图的SELECT查询或子查询中使用。 COUNT可以在SELECT列表或HAVING子句中与普通字段值一起出现。
用户7741497
2022/03/27
3.8K1
聚合函数Sum/Max/Count...
在度量值公式栏里,无论你输入'还是[,智能提示的都不会是列,而是其他已创建好的度量值,所以度量值是不可以直接引用列的。比如'咖啡数据表'中的[数量]列, 该表有近3万行,把这3万行的数据放入度量值中是没有任何意义的。度量值输出的是一个计算结果,所以我们只有用聚合函数求计算列的聚合值才有效。
公众号PowerBI大师
2019/08/07
1.3K0
聚合函数Sum/Max/Count...

相似问题

MongoDB聚合avg函数

12

滥用聚合函数avg()

13

AVG的AVG,子查询的聚合函数

14

让Avg与子句一起工作

12

将AVG(整数)与某个类别的AVG(整数)进行比较

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档