在postgres中有一个下表: table structure
需要在grails应用程序中编写以下SQL查询:
SELECT json_agg(r)
FROM(
SELECT data#>'{"name"}' as program,data#>'{"country"}' as agency,sum(cast(cast(data#>'{"amount"}' as text)as Integer)) as total_amount
FROM salary
group by data#>'{"name"}',data#>'{"country"}'
order by program, agency
)r
答案 0 :(得分:0)
对不起,我还不能发表评论,因为我没有50个声誉,所以我在这里发表评论。 您是否尝试使用postgres中的CREATE VIEW创建视图并使用服务中的简单查询?这就是我对我的所作所为。从grails查询这种方式要容易得多。
编辑 - 我的SQL服务示例
package com.myApp
import groovy.sql.Sql //Need to import this
class SomeService {
def dataSource //Need it to connect to your database
def result() {
def sql = new Sql(dataSource)
def resultRows = sql.rows('...your SQL statement...')
}
}
package com.myApp
class SomeController {
def someService //Inject your serivce here
def resultRows = someService.result() //Call service method here
[resultRows:resultRows] //Put the result into a map
}
您可以从视图中调用结果地图。
现在,如果您不想在服务中使用长SQL语句,则可以在postgres中使用CREATE VIEW sql语句。
CREATE or REPLACE VIEW result_table as
(... your SQL statement...);
我希望它有所帮助。
答案 1 :(得分:0)
使用以下代码,它可以工作......
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/TestDb");
dataSource.setUsername("postgres");
dataSource.setPassword("password");
def sql = new Sql(dataSource)
def resultRows = sql.rows(---SQL Query here---)
return resultRows
需要帮助用Hibernate替换上面的JDBC方法。