Arj*_*jee 5 java sql database postgresql hibernate
我要运行的查询:
SELECT date_trunc('month',UA.activity_date),SUM(UA.points) FROM user_activity UA
WHERE UA.activity_date > '01/01/2014' AND UA.activity_date < '12/31/2014'
GROUP BY date_trunc('month',UA.activity_date)
ORDER BY date_trunc('month',UA.activity_date)
Run Code Online (Sandbox Code Playgroud)
预期成绩:
03/01/2014 00:00:00 66.04000000000000000
05/01/2014 00:00:00 13.50000000000000000
07/01/2014 00:00:00 27.00000000000000000
08/01/2014 00:00:00 26.00000000000000000
09/01/2014 00:00:00 13.50000000000000000
Run Code Online (Sandbox Code Playgroud)
当我使用Hibernate运行该查询时,出现此错误:
ERROR: column "useractivi0_.activity_date" must appear in the GROUP BY clause or be used in an aggregate function
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我将上面的查询修改为:
SELECT date_trunc('month',UA.activity_date),SUM(UA.points) FROM user_activity UA
WHERE UA.activity_date > '01/01/2014' AND UA.activity_date < '12/31/2014'
GROUP BY date_trunc('month',UA.activity_date),***UA.activity_date***
ORDER BY date_trunc('month',UA.activity_date)
Run Code Online (Sandbox Code Playgroud)
但是,结果是错误的:
03/01/2014 00:00:00 25.40000000000000200
03/01/2014 00:00:00 25.40000000000000200
03/01/2014 00:00:00 15.24000000000000000
05/01/2014 00:00:00 13.50000000000000000
07/01/2014 00:00:00 9.00000000000000000
07/01/2014 00:00:00 18.00000000000000000
08/01/2014 00:00:00 4.50000000000000000
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
当我直接在db上从蟾蜍壳运行第一个查询时,它似乎工作正常。但是,当我使用Hibernate从代码中运行相同的查询时,会出现该错误。
您可以尝试将 sum 和 date_trunc 放在 subquery 中,如下所示:
SELECT colA, SUM(colB) FROM (SELECT date_trunc('month',UA.activity_date) colA,SUM(UA.points) colB FROM user_activity UA
WHERE UA.activity_date > '01/01/2014' AND UA.activity_date < '12/31/2014'
GROUP BY UA.activity_date
ORDER BY date_trunc('month',UA.activity_date))sub GROUP BY colA
Run Code Online (Sandbox Code Playgroud)
只需再次在外部查询中进行分组即可。看看是否有帮助。
归档时间: |
|
查看次数: |
1346 次 |
最近记录: |