Java Hibernate JPQL查询(聚合函数:计数)

时间:2011-08-15 11:57:49

标签: java sql hibernate jpql

在加入期间,我得到以下表格(示例):

+----------+----------+
| 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  |
+----------+------+--------+-----+

我尝试使用COUNTGROUP BY,但我得到了类似的内容:

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

等...

BR,Rene

2 个答案:

答案 0 :(得分:1)

标准的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

答案 1 :(得分:0)

实际上,你的结果看起来很好,每个“单元格”只有一行。

如果你希望每个Severity条目有一个列,你必须使用子选择,这不值得麻烦,IMO。只需读取您获得的行并手动将它们转换为矩阵格式。