HQL - 从select中选择计数

时间:2012-03-20 12:13:47

标签: hibernate hql

我希望能够计算另一个查询中返回的记录数量。使用SQL很容易:

select count (*) 
from  (
  select count(first_name) 
  from users 
  group by first_name) as temp

有没有人知道我怎么能用HQL做到这一点?

4 个答案:

答案 0 :(得分:0)

select count(*) from
(
   select AUTO_ID_CUSTOMER, sum(UNIT_QTY*UNIT_PRICE)
   from V_TRANSACTIONS
   where INV_DATE > '01/01/2006'
   group by AUTO_ID_CUSTOMER
   having sum(UNIT_QTY*UNIT_PRICE) < 100000
)

答案 1 :(得分:0)

我认为以通用方式不可能。 HQL确实 - 据我所知 - 不支持from子句中的子查询。 (当然,试一试。有时隐藏的功能......)

在这种情况下,查询将是:

select count(distinct first_name)
from users 

似乎无法计算多个不同的列。

feature for QueryOver(我不知道它是否存在以及如何在Java中调用它。)

如果您迫切需要它用于HQL,您可以编写这样的方法并将其发送给社区......

答案 2 :(得分:0)

我希望它会帮助别人。这是一个有效的HQL / SQL查询:

SELECT COUNT(*) FROM users AS u WHERE u.id IN 
  (SELECT u2.id FROM users AS u2 GROUP BY u2.first_name);

选择分组行的ID,然后计算此列表中包含id的行。

UPD :此查询的效果非常低。

答案 3 :(得分:0)

除非我的问题出错,否则如果目的只是查找查询返回的记录数,则可以尝试以下版本:

 session.createQuery("select count(first_name) from Users
 group by first_name)").list().size();

请注意,上述查询中的用户是实体名称而不是表名。

如果您正在寻找与您的SQL查询类似的HQL查询语法(即from子句中的subselect),Hibernate HQL不支持HHH-3356