HQL - выберите количество из выберите - PullRequest
3 голосов
/ 20 марта 2012

Я бы хотел посчитать количество записей, возвращенных в другом запросе.Использовать SQL очень просто:

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

Кто-нибудь знает, как мне это сделать с помощью HQL?

Ответы [ 4 ]

0 голосов
/ 10 января 2016

Если я не понял ваш вопрос неправильно, если вы хотите узнать только количество записей, возвращаемых запросом, вы можете попробовать следующую версию:

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

Обратите внимание, что Пользователи в вышеприведенном запросе - это имя сущности, а не имя таблицы.

В случае, если вы ищете синтаксис HQL-запроса, аналогичный вашему SQL-запросу (т. Е. Подвыбор в предложении from), этоне поддерживается Hibernate HQL согласно HHH-3356

0 голосов
/ 21 марта 2012

Я думаю, что это невозможно в общем смысле.Насколько я знаю, HQL не поддерживает подзапросы в предложении from.(Чтобы быть уверенным, попробуйте. Есть иногда скрытые функции ...)

В этом случае запрос будет:

select count(distinct first_name)
from users 

Кажется невозможным сосчитать несколько различных столбцов.

Для QueryOver есть функция (я не знаю, существует ли она и как она будет называться в Java).

Если вам крайне необходимоэто для HQL, вы можете написать такой метод и отправить его сообществу ...

0 голосов
/ 30 марта 2015

Надеюсь, это кому-нибудь поможет. Это действительный запрос HQL / SQL:

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

Выбор идентификаторов сгруппированных строк и затем подсчет строк с идентификатором в этом списке.

UPD: Производительность этого запроса очень низкая.

0 голосов
/ 20 марта 2012
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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...