【问题标题】:Grails: sum of field within criteria builderGrails:标准构建器中的字段总和
【发布时间】:2011-04-20 23:02:09
【问题描述】:

在控制器中创建标准后,我不知道如何创建特定字段的运行总和

我目前正在使用以下方法创建一组记录:

    def b = Tapes.createCriteria()
    def yesterday =  b.list(sort: 'migratedDate', order: 'asc') {
        between ("migratedDate", dat.minus(1), dat)
    }

并用

计算该集合中的项目数
def num2 = Tapes.countByMigratedDateBetween(dat.minus(1), dat)

我的域中的一个字段是“migratedDuration”,系统以毫秒为单位返回进程的运行时间。控制器中有没有办法创建这个数字的总和?还是我必须通过相应 .gsp 文件中的 javascript 来执行此操作?

再次感谢,

一个可怕的骇客

效果很好,谢谢

def todayTime = aa.list() { 
    between ("migratedDate", dat.minus(4), dat.minus(3)) 
    projections { sum('migratedDuration') 
    } 
}

【问题讨论】:

    标签: hibernate grails controller


    【解决方案1】:

    您可以为此使用投影:

    def b = Tapes.createCriteria()
    def yesterday = b.list() {
        projections {
            sum('migratedDuration')
        }
    }
    

    可以在here找到可用的投影列表。

    【讨论】:

      【解决方案2】:

      它真的是一个“运行总和”,即它是在每一行上递增还是你需要所有行的总和?

      可以使用 Projection 对所有行进行求和(阅读 CriteriaBuider 提供的“projections”闭包的文档)。

      如果是运行总计,您需要在控制器中执行此操作,或者在遍历结果列表中的行时查看自己。

      干杯

      【讨论】:

      • 谢谢!以下是成功的方法: def todayTime = aa.list() { between ("migratedDate", dat.minus(4), dat.minus(3)) projections { sum('migratedDuration') } }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      相关资源
      最近更新 更多