【问题标题】:Perform arithmetic operation on aggregate function using Hibernate projections使用 Hibernate 投影对聚合函数执行算术运算
【发布时间】:2014-04-26 19:22:18
【问题描述】:

我正在使用 Hibernate 4,我需要对聚合函数进行算术运算。我想使用预测来实现这一点。我试图得到的等效 MySQL 查询是这样的:

select sum(c)/sum(bs) from my_data where pid=6 group by DATE(event_timestamp)

到目前为止,我可以使用以下方法得到 sum(c):

List result= session.createCriteria(MyData.class)
                    .add(Restrictions.ge("eventTimestamp",fromDate)
                    .add(Restrictions.le("eventTimestamp",toDate)
                    .add(Restrictions.eq("property",p)
                    .setProjection(Projections.projectionList()
                                .add(Projections.sum("c"))
                                .add(Projections.sqlGroupProjection("date(evet_timestamp) as eventDate","eventDate",new String[]{"eventDate"},new Type[]{StandardBasicType.DATE})))
                    .addOrder(Order.asc("eventTimestamp"));

我可以通过这个获得sum(c),但正如你现在所看到的,我想要sum(c)/sum(bs) 作为结果。我该怎么做?

【问题讨论】:

    标签: sql hibernate hibernate-4.x


    【解决方案1】:

    您可以使用 Projections.sqlProjection 来引入所需的字段并计算字段值。在此处查看示例

    http://technofes.blogspot.com/2011/08/hibernate-examples-step-5.html

    更新

    add(Projections.sqlProjection("sum(c)/sum(bs) AS res",
                new String[] { "res" }, new Type[] {Hibernate.INTEGER }));
    

    【讨论】:

    • 我可以看到如何使用它来形成这个查询select sum(c/bs) from my_data where pid=6 group by DATE(event_timestamp),但我真正想要的是这个查询select sum(c)/sum(bs) from my_data where pid=6 group by DATE(event_timestamp)。我说的有道理吗??
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2018-11-07
    • 2012-12-04
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多