row_number()在hql中的分区
发布时间:2020-09-21 19:07:03 所属栏目:Windows 来源:互联网
导读:在hql中,row_number()相当于分区的含义 我在hql中有以下查询: select s.Companyname, p.Productname, sum(od.Unitprice * od.Quantity - od.Discount) as SalesAmount FROM OrderDetails as od inner join od.Orders as o inner join o
|
在hql中,row_number()相当于分区的含义
select s.Companyname,p.Productname,sum(od.Unitprice * od.Quantity - od.Discount) as SalesAmount FROM OrderDetails as od inner join od.Orders as o inner join od.Products as p " +
"inner join p.Suppliers as s" +
" where o.Orderdate between '2010/01/01' and '2014/01/01' GROUP BY s.Companyname,p.Productname"
我想通过s.Companyname进行分区,其中RowNumber< = n. 据我所知,你不能在 HQL和 JPQL中使用row_number().我建议在这种情况下使用 native SQL查询:@PersistenceContext
protected EntityManager entityManager;
...
String sQuery = "SELECT q.* FROM (" +
"SELECT s.company_name," +
"p.product_name," +
"sum(od.unit_price * od.quantity - od.discount) as SalesAmount," +
"row_number() OVER (partition by s.company_name) as rn " +
"FROM OrderDetails od " +
"INNER JOIN Orders o ON o.id = od.order_id " +
"INNER JOIN Products p ON p.id = od.product_id " +
"INNER JOIN Suppliers s ON s.id = p.supplier_id " +
"WHERE o.order_date between '2010/01/01' and '2014/01/01') as q " +
"WHERE rn <= :n";
List<ResultDbo> results = new ArrayList<>();
Query query = entityManager.createNativeQuery(sQuery);
query.setParameter("n",n);
List<Object[]> resultSet = query.getResultList();
for (Object[] resultItem : resultSet) {
ResultDbo result = new ResultDbo();
result.setCompanyName((String) resultItem[0]);
result.setProductName((String) resultItem[1]);
result.setSalesAmount((String) resultItem[2]);
results.add(result);
}
如果您尝试在HQL中使用OVER(),您几乎肯定会得到一些验证异常,例如java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:在第1行第42列附近. .. (编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- win10 spark+scala+eclipse+sbt 安装配置
- windows – 直接从文件系统获取文件校验和,而不是显式计算它
- QML 发布时 libeay32.dll错误
- npm ERR!注册表错误解析json – 尝试在Windows 8中安装Cor
- 如何在Window中的嵌入式浏览器中调试Javascript?
- Windows – 如何使输出显示在Visual Studio 2005的错误列表
- 无法使用for循环从Windows批处理脚本编写html
- windows – 如何使批处理文件自行删除?
- 在Windows下的Java应用程序中编写C控制台应用程序
- windows-server-2008-r2 – Windows任务计划程序:由于超时
推荐文章
站长推荐
- 用windows下编译过的eAccelerator for PHP 5.1.6
- .net – 任务栏中应用程序图标上的Win7进度条?
- api-ms-win-crt-runtime-|1-1-0.dll丢失的解决方
- 如何配置在Windows上运行的node.js以使用具有多个
- windows – 为cmd启用颜色输出
- 有没有办法在Windows cli中使用’COPY’命令(Pos
- 最有效的方法来检查Windows中的Java文件是否为空
- 如何使Windows Forms .NET应用程序显示为托盘图标
- windows-phone-8 – 适用于Windows Phone 8的企业
- Win10 安装TensorFlow tflearn
热点阅读
