按name分组后,同样的name只会一条记录,要不然怎么叫分组,但如果你又不想去重,又想看分组结果,可以用分析函数或者分组后再关联一个没有分组的记录,就可以实现你想要的了SQL> select empno,deptno,sum(sal) over (partition by deptno) from emp;
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;
你使用的 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 的实际用法。
不好意思,更正一下: 我上面的回帖,我是说 你的 select name from score group by name 和 select distinct name from score 这两句效果一样的 。
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
试试
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 的实际用法。
我上面的回帖,我是说 你的
select name from score group by name
和
select distinct name from score 这两句效果一样的 。