Во-первых, я бы, вероятно, не использовал критерии для этого.Критерии полезны, когда запрос должен генерироваться динамически на основе переменных критериев поиска.Ваш запрос полностью статичен, не возвращает сущности, но скаляры, и у вас уже есть.Почему бы просто не использовать SQL-запрос?Или, по крайней мере, HQL-запрос, если вы не хотите жестко кодировать имена таблиц и столбцов.
Если критерии по какой-то непонятной причине являются единственным приемлемым способом выполнения этого запроса, я бы не форматировалрезультат запроса в SQL.Я бы сделал это на Java, что, по крайней мере, упростило бы создание предложений select и group by.
Единственная сложная вещь - это формат даты.Но подождите, ваш запрос выбирает строки, которые все должны быть в текущем месяце.Все возвращенные строки будут иметь одинаковую форматированную дату.Итак, зачем выбирать его в первую очередь?
Таким образом, ваш запрос может быть переписан следующим образом:
select worker_id ,sum(SalaryPerDay), sum(attendance) from tbl_attendance
where worker_id is not null
and date >= :startOfCurrentMonth,
and date < :endOfNextMonth
group by worker_id
order by worker_id
И вдруг он становится простым для выполнения, в HQL или Критериях.