【问题标题】:Java Hibernate JPQL Query (Aggregate Function: count)Java Hibernate JPQL 查询(聚合函数:count)
【发布时间】:2011-10-27 05:39:20
【问题描述】:

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

+----------+----------+
| 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,雷内

【问题讨论】:

    标签: java sql hibernate jpql


    【解决方案1】:

    实际上,您的结果看起来不错,每个“单元格”只有一行。

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

    【讨论】:

    • 感谢您的回答,但我不想另外这样做。以上工作,我可以在一个查询中得到想要的结果。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多