2012-03-20 41 views
2

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

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

有没有人有任何想法我怎么能使用HQL做到这一点?

回答

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 
) 
+5

这是一个很奇怪的答案上面的问题。 – 2012-03-20 14:26:24

+0

给我更多关于HQL的描述? – 2012-03-20 14:35:07

+0

@Mrugen http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html – lszk 2012-03-21 06:51:10

0

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

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

select count(distinct first_name) 
from users 

似乎不可能指望多个不同的列。

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

如果你迫切需要它的HQL,你可以写这样的方法,并将其发送到社区...

+0

但是,当我有多个不同的列时,问题就出现了...... – melmack 2012-03-21 09:43:47

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:此查询的性能很低。

0

除非我收到了你的问题错了,如果意图是才发现的查询返回的记录数,你可以试试下面的版本:

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

注意的是,用户在上面的查询是实体名称而不是表格名称。

在情况下,如果你正在寻找HQL查询语法类似于你的SQL查询(即,from子句的子查询中),它不是由Hibernate HQL支持按HHH-3356