要用Group By的话,在Select语句中就要用分组函数吗(例如sum(*) &brvbarmax(*))!为什么啊....

解决方案 »

  1.   

    不一定的
    不过分组一般就用来干这个的
    当然也可以用来过滤重复的
    反正select 里的非聚合函数(SUM,MAX之类的就是单行聚合函数)的字段,都一定要出现在GROUP BY里的
      

  2.   

    比如你说有数据
    name
    王二
    王二
    张三
    李四
    李四
    李四你用
    select distincts name from a
    出来的结果 
    name
    王二
    张三
    李四用select name from a group by name
    出来的结果 
    name
    王二
    张三
    李四
      

  3.   

    用select name from a group by name
    出来的结果
    name
    王二
    张三
    李四
    这个怎么就可以不用group by什么时候用group by 给几个例子
      

  4.   

    一般来说你只有用到分组统计时才需要用group by
    比如说你要统计同一部门的薪水总和,最高薪水,平均薪水之类
    而如果是这样的数据name 
    王二 
    张三 
    李四你要把这些数据显示出来,假设没有重复,也不需要过滤重复的的
    那你直接select name from a就行了
    虽然select name from a group by name也能出来,不过效率不如上面的
      

  5.   

    而又比如说你的数据
    name 
    王二 
    王二 
    张三 
    李四 
    李四 
    李四 你要统计每个出现过几次
    select name ,count(*) from a group by name
    就会出来
    name   count(*)
    王二   2
    张三   1
    李四   3
    你也可以写成select count(*) from a group by name
    出来的结果
    count(*)
    2
    1
    3
      

  6.   

    你也可以写成select count(*) from a group by name
    出来的结果
    count(*)
    2
    1
    3 这个是先分组在统计的吗
      

  7.   

    SUM,MAX之类的就是单行聚合函数..?
    多行聚合函数呢 都是什么啊 看了一下 没太明白
      

  8.   

    sum,max之类的
    如果不加分组,必定只出来一行数据
    加分组的话,对于同一分组,也必定同一分组只出来一行数据
    所以叫单行聚合函数
      

  9.   

    十分感谢hebo2005的回答 学习到了很多select 里的非聚合函数(SUM,MAX之类的就是单行聚合函数)的字段,都一定要出现在GROUP BY里的 ...?select count(id), name form user group by id 非聚合函数的字段,都一定要出现在GROUP BY里的 ...? 就是说name一定要出现在GROUP BY里的 ...?
     
     用id不可以吗 
      

  10.   

    聚合函数里出现的字段,不需要出现的group by 里
    而一些自定义函数里出现的字段,也需要出现在group by 里的像你上面的例子
    select count(id), name form user group by id 
    这样肯定不行的,因为name不是聚合函数,又没出现在group by里

    select count(id) form user group by id 
    这样是可以的
      

  11.   

      观注中....
    id一般情况下都是主键呀,你group by也没有意义吧!!!
      

  12.   


    最后一问:聚合函数里出现的字段,不需要出现的group by 里
    而一些自定义函数里出现的字段,也需要出现在group by 里的 
    你要统计每个出现过几次
    select name ,count(*) from a group by name
    就会出来
    name  count(*)
    王二  2
    张三  1
    李四  3
    你也可以写成select count(*) from a group by name
    出来的结果
    count(*)
    2
    1
    这里的name自定义函数里出现的字段吗写个例子看看
      

  13.   

    楼主最后的问题可以用hebo2005的这个回复来回答。
    比如自定义函数的写法大概类似
    select count(id) form user group by id 
      

  14.   

    Mark一下count(*),是相同的只有一行   1
    name     是多行             
    group by name 分组统计name ,
    如 select count(id),name from user group by id,name;
     
      

  15.   

    select count(*) from user;
    select id from user group by id; =  select distinct id from user; 
    select id, count(*) from user group by id;
    这个就看你干什么用了,只要仔细理解一下就知道什么行,什么不行了