Distinct函数的替代方法
						
				
		
		
				
				 
		
				
				 
		
				    今天在论坛上看到一个面试题,是说有什么办法可以替代distinct,得到同样的结果。答案都被大家说的差不多了,发现挺有意思的,就记录一下:
SQL> select num from t1;
		
		
				
						
       NUM
----------
         6
         6
         7
         8
         9
         1
         1
         1
       1
        1
         1
         1
        1
         1
        1
				
						
15 rows selected
 
SQL> select distinct num from t1;
		
		
				
				
				
						
       NUM
----------
         1
         6
         8
        7
        9
				
						
5 rows selected
		
		
				
						
								一、用unique代替distinct:
								
						
						
这个比较无耻,基本属于说了跟没说一样,但确实是对的
		
		
				
						
								
								SQL> select unique num from t1;
						
						
						
						
								
       NUM
----------
         1
         6
         8
        7
        9
						
								
5 rows selected
二、用group by来做:
这个应该是出题者的本意
						
								
								SQL> select num from t1 group by num;
						
						
						
						
								
       NUM
----------
         1
         6
         8
         7
         9
						
								
5 rows selected
三、用union和minus:
因为union和minus默认都是先distinct然后再做聚集,所以可以这样做:
SQL> select num from t1 minus select 999 from dual;
						
						
						
								
       NUM
----------
         1
         6
         7
         8
         9
						
								
5 rows selected
  
				
		
		
				
						
								SQL> select num from t1 union select num from t1 ;
						
				
		
		
				
						
						
						
								
       NUM
----------
         1
         6
         7
         8
         9
						
								
5 rows selected
						
								
一个是minus一个没有的项,一个是union它本身。
						
								
关于其他的方法,要是再用over之类的就没有什么太大的意义了,差不多就这3种了。