Distinct的作用是用於從指定集合中消除重復的元組,經常和count搭檔工作,語法如下
COUNT( { [ ALL | DISTINCT ] expression ] | * } )
這時,可能會碰到如下情況,你想統計同時有多列字段重復的數目,你可能會立馬想到如下方法:
selectcount( distinct col1 , col2 , col3 , .......) from table
但是,這樣是不允許的,因為count是不能統計多個字段的,雖然distinct是可行的。
有種比較直接的方法就是把消除重復后在統計查詢:
select count(*) from (select distinct col1 ,col2 , col3 from table)A
但是在有些復雜情況下,比如你的統計值可能還需要作為新的臨時表的一列,而且這個新表可能還在做些其他復雜查詢時候,這樣就不是很方便了。
有種方法比較特別,就是把多個字段的當做一個字段去用於消除重復,比如把這個多個字段的字符串連接起來。如下:
selectcount(DISTINCT fcode+cast(fread_date as varchar(30))) from my_table
這種解決方案在某些情況還是挺方便的,雖然效率不高