Java Hibernate JPQL-запрос (агрегатная функция: количество) - PullRequest
0 голосов
/ 15 августа 2011

Во время объединения я получаю следующую таблицу (пример):

+----------+----------+
| Hostname | Severity |
+----------+----------+
| host1    |   high   |
| host2    |  medium  |
| host1    |   high   |
| host2    |   low    |
| host1    |   low    |
| host2    |   low    |
| host1    |   low    |
| host2    |   high   |
| host1    |   high   |
| host2    |   high   |
+----------+----------+

Можно ли создать I JPQL-запрос, в котором я получаю следующий результат:

+----------+------+--------+-----+
| Hostname | high | medium | low |
+----------+------+--------+-----+
| host1    |  3   |   0    |  2  |
| host2    |  2   |   1    |  2  |
+----------+------+--------+-----+

Я пытался с COUNT и GROUP BY, но я получил что-то вроде этого:

host1,high,3
host1,medium,0
host1,low,2

и т.д ...

BR, Rene

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Стандартный SQL-запрос выглядел бы так: я не уверен, какие усилия требуются для используемого вами API, но это довольно простая группа с логикой регистра.

select hostname, 
  sum(case when severity = 'high' then 1 else 0 end) as high,
  sum(case when severity = 'medium' then 1 else 0 end) as medium,
  sum(case when severity = 'low' then 1 else 0 end) as low
from
  Table
group by
  hostname
order by
  hostname
0 голосов
/ 15 августа 2011

На самом деле, ваш результат выглядит нормально, это всего одна строка на "ячейку".

Если вы хотите иметь столбец для каждой записи Severity, вам придется использовать подвыборы, которые не стоят хлопот, IMO. Просто прочитайте полученные строки и конвертируйте их в матричный формат вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...