У меня есть две таблицы, Полоса и Голоса. Полоса имеет имя и идентификатор, и Голоса имеют 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 или как Быть в спящем режиме запрос критериев.
Действительно ли это легко, и я просто пропускаю его? Спасибо за любую справку.
Не могли бы вы попробовать это в 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 тоже не работает в настоящее время развернуть сгруппированный объект, поэтому вы не можете писать группы по кошкам, если все свойства кошки не агрегированы. Вы должны перечислить все неагрегированные свойства явно.