2011-08-15 43 views
0

期间加入我得到如下表(例如):Java的Hibernate的JPQL查询(聚合函数:计数)

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

是否有可能创造我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,刘若英

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

Thx适合我。 – reen

0

其实,你的结果看起来不错,这是每个“细胞”只是一行。

如果你想拥有每Severity条目列,你必须使用子查询,这是不值得冒这个险,IMO。只需读取您获得的行并手动将它们转换为矩阵格式即可。

+0

感谢您的回答,但我不想那样做。上述工作,我可以得到wantet结果在一个单一的查询。 – reen