向大家请教一个简单的语句怎么写!
一个表T,里面有a,b,c,d4个字段,我想根据a字段分组,并对d字段执行count操作,d字段存放数字。
比如:
a     b    c      d
=============
y     as  ff    2
y     as   ff  3
y     sd   ff   5
u     sf    ff   9
u     sd   ff   7
u     sdf   ff   56
u     sdf  ff   6
ss    sdf  ff   7
ss    sdf  ff   2
ss   sdf  ff    1要实现这样的效果怎么做啊?
现在就困在gruoup by的时候必须把a,b,c,d4个字段都写上去,我只想groupby a这样怎么实现?
希望各位帮我下,谢谢了!

解决方案 »

  1.   

    没明白你说的意思
    select a,count(d) from tt group by a
    不行吗
    b,c要怎么处理
    按这个例子你给个结果
      

  2.   

    还是说想要的是这个?
    select a,b,c,d,count(d)over(partition by a)
    from tt
      

  3.   

    select a,max(b) b,max(c) c,count(d) 
    from tt 
    group by a
    这样是你想要的
      

  4.   

    我想要是这种效果,如下图所示:
    比如原来数据时这样的:a    b    c      d   
    ==================== 
    y    as  ff  2          
    y    kk  ff  3 
    y    as  ff  5 
    y    kk  ff  5u    sf  qq  9 
    u    sd  qq  56 
    u    sd  qq  6 
    ================================
    我想得到的是:a    b    c      d   count(b) 
    ==================== 
    y    as  ff    7        2
    y    sd  ff   12        2
    u    sf  qq   9         1
    u    sd  qq   7         2这样怎么实现啊?
      

  5.   

    select a,b,c,d,count(d)
    from table1
    group by a,b,c
      

  6.   

    不好意思哈,刚才的
    y    sd  ff  12        2 
    应该是y    kk  ff  12        2
    统计b字段是kk的
      

  7.   

    5楼的代码要把d去掉或者改成max(d)
    你举的例子和结果不对应哦
    不知道你到底要根据什么分组
      

  8.   

    select a,b,c,sum(d),count(1)
    from table1
    group by a,b,c
      

  9.   

    这个我试过了,但是如果我再加一个字段显示,结果就又会不一样的了,因为在groupby里又多了一个字段分组,可是我只想让他按照a,b,c字段分组,而不想按照又新加的那个字段分组,怎么办啊?
      

  10.   

    请教楼上的,为什么是count(1)啊,他在这里起什么作用啊?
      

  11.   

    select a,b,c,sum(d),count(b) 
    from table1 
    group by a,b,c
      

  12.   

    count(1)统计分组中的记录条数
    只要d不为空,和count(d)是一样的
    要根据a,b,c分组,那么如果来个别的字段,分组后的那些e,f。。字段该怎么处理?
    你就不管其他字段
    select a,b,c,count(d) from table1 group by a,b,c好了
    或者也要查看其他字段的话,就不要聚合了
    select a,b,c,d,e,count(d)over(partition by a,b,c)
    from table1count()over()是分析函数
      

  13.   

    嗯,谢谢wildwave的详细解答,那如果我想再sum(e)的呢?好像这个over()不支持多个分组函数的噢!
    如果你有好的ORACLE基础语法学习资料,麻烦发个资料,好好学习下了,谢谢啦!
      

  14.   

    我的目的是:
    通过a字段来分组,然后在a字段里每一组相同的值对b字段进行计数,c字段显示,然后对d,e,f字段进行sum()算法,这样怎么实现噢?麻烦各位了,这次真让我学习到了oracle的好多东西!希望大家能帮下我!
      

  15.   

    如果对a,b,c分组后其他字段都聚合,就不需要用分析函数了
    select a,b,c,sum(d),sum(e),sum(f),count(1)
    from table1
    group by a,b,c即可
    要用分析函数的话
    select a,b,c,sum(e)over(partition by a,b,c),sum(f)over(partition by a,b,c)...
    from table1资料你可以到csdn下载频道找找,我是自己买看的
    oracle database 11g 开发指南
      

  16.   

    select a,b,c,d,count(d)over(partition by a) 
    from tt
      

  17.   

    谢谢楼上的各位了,这个需求我已经明白怎么做了,就像wildwave说的一样,我先去下载些oracle的资源学习下,多多练习下,谢谢各位帮忙了,给大家散分了,谢谢各位了,分数不是很多,希望大家不要介意噢!