gpt4 book ai didi

sql - 如何使用grails 2.5.0中的where子句返回表中值的总和

转载 作者:行者123 更新时间:2023-12-02 14:30:46 25 4
gpt4 key购买 nike

域类:

class Transaction {
String roundId
BigDecimal amount
:
}

我们希望执行以下SQL:

“从事务t中选择总和(t.amount),其中t.roundId = xxx”

我们无法找到不返回交易行的示例。

我们假设有两种方法:
  • 使用投影和/或条件等?我们发现的所有示例仅返回事务行列表,而不返回总和。
  • 使用原始SQL。我们如何调用SQL,并获取返回的BigDecimal的句柄?

  • 我尝试了这个:
    class bla{
    def sessionFactory
    def someMethod() {
    def SQLsession = sessionFactory.getCurrentSession()
    def results = SQLsession.createSQLQuery("select sum(t.credit) from transaction t where t.round_id = :roundId", [roundId: roundId])

    但这失败了
    groovy.lang.MissingMethodException: No signature of method: org.hibernate.internal.SessionImpl.createSQLQuery() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap)

    另外,我也不知道返回类型是什么(不能找到任何文档)。我猜这将是一个列表:数组? map ?

    ====更新====

    找到了一种可行的方法(不是很优雅或类似grails)
        def SQLsession = sessionFactory.getCurrentSession()
    final query = "select sum(t.credit) from transaction t where t.round_id = :roundId"
    final sqlQuery = SQLsession.createSQLQuery(query)
    final results = sqlQuery.with {
    setString('roundId', roundId)
    list() // what is this for? Is there a better return value?
    }

    这似乎返回一个数组,而不是预期的列表,所以我可以这样做:
    if (results?.size == 1) {
    println results[0] // outputs a big decimal
    }

    奇怪的是,results.length失败了,但是results.size起作用了。

    最佳答案

    使用Criteria,您可以执行

    Transaction.withCriteria {
    eq 'roundId', yourRoundIdValueHere
    projections {
    sum 'amount'
    }
    }

    关于sql - 如何使用grails 2.5.0中的where子句返回表中值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31750785/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com