微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

oracle – Group By没有正确分组

我正在使用oracle,它的group by子句似乎与我期望的行为非常不同.

使用此查询时:

SELECT stats.gds_id,stats.stat_date,SUM(stats.A_BOOKINGS_NBR) as "Bookings",SUM(stats.RESPONSES_LESS_1_NBR) as "<1",SUM(stats.RESPONSES_LESS_2_NBR) AS "<2",SUM(STATS.RESPONSES_LESS_3_NBR) AS "<3",SUM(stats.RESPONSES_LESS_4_NBR) AS "<4",SUM(stats.RESPONSES_LESS_5_NBR) AS "<5",SUM(stats.RESPONSES_LESS_6_NBR + stats.RESPONSES_LESS_7_NBR + stats.RESPONSES_GREATER_7_NBR) AS ">5",SUM(stats.RESPONSES_LESS_6_NBR) AS "<6",SUM(stats.RESPONSES_LESS_7_NBR) AS "<7",SUM(stats.RESPONSES_GREATER_7_NBR) AS ">7",SUM(stats.RESPONSES_LESS_1_NBR + stats.RESPONSES_LESS_2_NBR + stats.RESPONSES_LESS_3_NBR + stats.RESPONSES_LESS_4_NBR + stats.RESPONSES_LESS_5_NBR + stats.RESPONSES_LESS_6_NBR + stats.RESPONSES_LESS_7_NBR + stats.RESPONSES_GREATER_7_NBR) as "Total"
FROM gwydb.statistics stats
WHERE stats.stat_date >= '01-JUN-2011'
GROUP BY stats.gds_id,stats.stat_date

我得到这样的结果:

GDS_ID  STAT_DATE   Bookings    <1      <2  <3  <4  <5  >5  <6  <7  >7  Total    
02      12-JUN-11   0           1       0   0   0   0   0   0   0   0   1
1A      01-JUN-11   15          831     52  6   2   2   4   1   1   2   897
1A      01-JUN-11   15          758     59  8   1   1   5   2   1   2   832
1A      01-JUN-11   10          593     40  2   2   1   2   1   0   1   640
1A      01-JUN-11   12          678     40  10  5   2   3   1   0   2   738
1A      01-JUN-11   24          612     56  6   1   3   4   0   0   4   682
1A      01-JUN-11   23          552     37  7   1   1   2   0   1   1   600
1A      01-JUN-11   35          1147    132 13  6   0   8   0   2   6   1306
1A      01-JUN-11   91          2331    114 14  5   1   14  3   1   10  2479

如您所见,我每个GDS_ID有多个重复的STAT_DATE.为什么会这样,我怎样才能将它们组合在一起呢? I.E.对每个STAT_DATE的每个GDS_ID的值求和.

解决方法

可能是因为STAT_DATE有一个时间组件,它在GROUP BY中被考虑在内但由于认格式掩码而未显示在结果中.要忽略时间,请执行以下操作:

SELECT stats.gds_id,Trunc(stats.stat_date) stat_date,Trunc(stats.stat_date)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐