在看一本sql的书,学到group by这个语法,我就在我的oracle中实验了一下,发现oracle的group by还能消除重复记录,话说我不想让他消除重复的,该怎么办呢

解决方案 »

  1.   

    其实这score表里有好几个叫张三的,好几个叫王五的。。怎么既按name分组,又保留重复呢??大侠们
      

  2.   

    按name分组后,同样的name只会一条记录,要不然怎么叫分组,但如果你又不想去重,又想看分组结果,可以用分析函数或者分组后再关联一个没有分组的记录,就可以实现你想要的了SQL> select empno,deptno,sum(sal) over (partition by deptno) from emp;
     
    EMPNO DEPTNO SUM(SAL)OVER(PARTITIONBYDEPTNO
    ----- ------ ------------------------------
     7782     10                           8750
     7839     10                           8750
     7934     10                           8750
     7369     20                          10875
     7876     20                          10875
     7902     20                          10875
     7788     20                          10875
     7566     20                          10875
     7499     30                           9400
     7698     30                           9400
     7654     30                           9400
     7900     30                           9400
     7844     30                           9400
     7521     30                           9400
     
    14 rows selected
    SQL> select e.empno, e.deptno, t.s
      2            from emp e,
      3                 (select deptno, sum(sal) s from emp group by deptno) t
      4           where e.deptno = t.deptno order by e.deptno;
     
    EMPNO DEPTNO          S
    ----- ------ ----------
     7782     10       8750
     7839     10       8750
     7934     10       8750
     7369     20      10875
     7566     20      10875
     7788     20      10875
     7876     20      10875
     7902     20      10875
     7499     30       9400
     7521     30       9400
     7654     30       9400
     7698     30       9400
     7844     30       9400
     7900     30       9400
     
    14 rows selected
      

  3.   

    group by 并不能取消重复,你查询语句里面的distinct是取消重复的意思。
      

  4.   

    select name from score group by name;
    试试
      

  5.   

    你使用的  
     select distinct name from score group by name  
    的效果其实和
     select name from score group by name  
     select name from score  
    是一摸一样的。你既然一定要对name 进行分组,而你查询的字段又只有name,那么自然会消除重复记录,不可能会保留原有记录的。  因为对name 进行分组的意思就是对name字段里每个值按照一定的聚合函数进行统计,这样当然不会保留所有的记录。 你如果要保留所有的记录,就只能select name from score 。
    简单的说你的两个目的:1.使用group by name ,2.保留原有记录
    这两个目的本身就是不能共存的,你之所以会有这样的想法,我猜是因为你还不了解group by 的实际用法。
      

  6.   

    不好意思,更正一下:
    我上面的回帖,我是说 你的 
     select name from score group by name 

     select distinct name from score 这两句效果一样的 。
      

  7.   

    多謝大家  對group by有了新的认识