qq_41660047
qq_41660047
2018-03-20 16:29
采纳率: 34.2%
浏览 1.1k

重赏!ORACLE的有关GROUP BY的语句为何老报错,求高手指教

CREATE TABLE SUIJI518 AS SELECT S2,S3,S4,S5,S6,S7,S1,S8 FROM SUIJI18 Group by S2,S3,S4,S5,S6,S7,S1
以上是我的SQL语句,执行后ORACLE报错:
错误报告:
ORA-00979: 不是 GROUP BY 表达式
ORA-06512: 在 "DBSNMP.ZHONGZHUANDAORU", line 48
ORA-06512: 在 line 20
00979. 00000 - "not a GROUP BY expression"
*Cause:

*Action:
求高手指教是怎么回事!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

13条回答 默认 最新

  • qq_36522306
    MrBoringBigFish 2018-03-21 01:20
    已采纳

    你这表复制不是这样玩的, 你select了多少个字段,后面group by就得是相同的字段

    点赞 评论
  • caozhy

    CREATE TABLE是创建表啊,怎么后面还有GROUP BY

    点赞 评论
  • KnowsHow
    KnowsHow 2018-03-20 23:37

    group by要配合聚合函数使用,如sum,count,max等,你那语句group by 后面只到了s7,语句里面有s8需要处理

    点赞 评论
  • u010936098
    橡木疙瘩 2018-03-21 00:03

    SELECT S2,S3,S4,S5,S6,S7,S1,S8 FROM SUIJI18 Group by S2,S3,S4,S5,S6,S7,S1
    这句中字段S8出现在SELECT段但没有出现在GROUP BY段,只能出现在聚合函数中,比如换成MAX(S8)

    点赞 评论
  • welan123123
    奔跑的小鱼儿 2018-03-21 00:52
    点赞 评论
  • happyzhangdi008
    tylerzhangdi 2018-03-21 01:49

    报错:不是单组分组函数

    如果程序中使用了分组函数,则有两种情况可以使用:
    1 程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来
    2 如果不使用分组的活,则只能单独使用分组函数,在使用分组函数的时候,不能出现分组条件之外的字段

    二、

    当使用分组函数时,分组函数只能出现在选择列表、order by 和 having 子句中,而不能出现在 where 和 group by 子句中。另外,使用分组函数还有以下一些注意事项:

    1、  当使用分组函数时,除了函数 count(*) 之外,其他分组函数都会忽略 null 行,当然 count(列名) 也会忽略 null 行。
    
    2、  当执行 select 语句时,如果选择列表时包含列、表达式和分组函数,那么这些列和表达式必须出现在 group by 子句中。
    
    3、  当使用分组函数时,在分组函数中可以指定 all 和 distinct 选项。其中 all 是默认选项,该选项表示统计所有行数据(包括重复行);如果指定 distinct,则只会统计不同行值。
    
    4、  Having 是在 group by 语句之后。
    

    三、

    group by 用于对查询结果进行分组统计,而 having 子句则用于限制分组显示结果。注意,如果在选择列表中同时包含列、表达式和分组函数,那么这些列和表达式必须出现在 group by 子句中。

    四、

    使用 group by 子句、where 子句和分组函数有以下一些注意事项:

    1、分组函数只能出现在选择列表、having 子句和 order by 子句中
    
    2、如果在select 语句中同时包含 group by 、having 以及 order by 子句,则必须将 order by 子句放在最后。默认情况下,当使用 group by 子句统计数组时,会自动按照分组列的升序显示统计结果。通过使用 order by 子句,可以改变数据分组的排序方式。
    
    3、如果选择列表包含有列、表达式和分组函数,那么这些列和表达式必须出现在 group by 子句中,否则会显示错误消息。
    
    4、当限制分组显示结果时,必须要使用 having 子句,而不能在 where 子句中使用分组函数限制显示结果,否则会显示错误信息。
    
    点赞 评论
  • cxfidc01
    红帽01 2018-03-21 01:57

    查询的字段和group by 的字段必须一致

    CREATE TABLE SUIJI518 AS
        SELECT  S2 ,
                S3 ,
                S4 ,
                S5 ,
                S6 ,
                S7 ,
                S1 ,
                S8
        FROM    SUIJI18
        GROUP BY S2 ,
                S3 ,
                S4 ,
                S5 ,
                S6 ,
                S7 ,
                S1 ,
                S8
    
    点赞 评论
  • qq910903250
    qq910903250 2018-03-21 02:24

    Group by只能跟在select后边,你这语法不对吧。

    点赞 评论
  • baidu_41690072
    小虾米的成长之路 2018-03-21 03:24
    点赞 评论
  • fioger_4252
    悟空小短裙 2018-03-21 08:14

    s8这个字段没放上去

    点赞 评论
  • yishizhu221
    chenxiang221 2018-03-21 09:30

    group by 是分组函数,所以在select后面应该有一个count、sum、avg等计算函数,然后跟着列,在group by 后面也跟着这些列。比如:
    select sum(s8),s1,s2,s3,s3,s5,s6,s7 from SUIJI18 group by s1,s2,s3,s4,s5,s6,s7

    点赞 评论
  • qq_18566995
    qq_18566995 2018-03-22 12:10

    select后的列数需要和group by 的列数保持一致

    点赞 评论
  • xuzhongfei
    dffly156 2018-04-04 15:25

    一般select后的列数需要和group by 的列数保持一致,除非是固定值;例如 select '1' aa,'2' bb, cc,dd from table group by cc,dd;或者是sum(某个字段)本身就聚合了 groupby 才可以不放

    点赞 评论

相关推荐