2012-03-20 62 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