Версия HQL SQL присоединяется к группе

У меня есть две таблицы, Полоса и Голоса. Полоса имеет имя и идентификатор, и Голоса имеют total_votes столбец и внешний ключ, названный band_id, указывающим band.id.

У меня есть много голосов, сохраненных в различные даты. То, что я хочу сделать, является находкой максимальное значение total_votes столбца для каждой полосы. Следующие работы SQL-запроса:

select b.name,max(v.total_votes) as total from band b, votes v 
    where b.id=v.band_id
    group by b.name order by total desc;

Система я работаю с, тем не менее, использованием, в спящем режиме. Я хотел бы переписать тот SQL-запрос или как HQL или как Быть в спящем режиме запрос критериев.

Действительно ли это легко, и я просто пропускаю его? Спасибо за любую справку.

8
задан Pascal Thivent 4 August 2010 в 05:54
поделиться

1 ответ

Не могли бы вы попробовать это в HQL:

select band.name, max(vote.totalVotes)
from Band band
     join band.votes vote
group by band.name
order by max(vote.totalVotes) desc

Предполагается, что существует связь один-ко-многим между Band и Votes (фактически, предоставляя объектную модель очень полезен при работе с HQL и / или Criteria API, так как вы запрашиваете объектную модель).

На всякий случай вот соответствующий раздел документации:

14.12. Предложение group by

Запрос, который возвращает агрегированные значения. можно сгруппировать по любому свойству возвращаемый класс или компоненты:

 выберите cat.color, sum (cat.weight), count (cat)
от кота кота
группа по цвету кат.
выберите foo.id, avg (имя), max (имя)
от Foo foo присоединиться к foo.names name
группа по foo.id

Также разрешено наличие предложения.

 выберите цвет по каталогу, сумму (вес по каталогу), количество (по каталогу)
от кота кота
группа по цвету кат.
имеющий cat.color (например, Color.TABBY, например, Color.BLACK)

Функции SQL и агрегатные функции разрешены в наличии и по заказу статей, если они поддерживаются базовая база данных (т.е. не в MySQL).

 выберите кот
от кота кота
присоединиться к кошке. котята котенок
группа по cat.id, cat.name, cat.other, cat.properties
имея средний (вес котенка)> 100
упорядочить по количеству (котенок) по возрастанию, сумме (по весу котенка) по убыванию

Ни пункт о группировке, ни Предложение order by может содержать арифметические операции выражения. Hibernate тоже не работает в настоящее время развернуть сгруппированный объект, поэтому вы не можете писать группы по кошкам, если все свойства кошки не агрегированы. Вы должны перечислить все неагрегированные свойства явно.

14
ответ дан 5 December 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: