在工作中用到了,就返回來看看。
首先查詢數據庫中重復數據示例SQL
SELECT user_id, count(1) FROM kx_st_user_earning WHERE statistics_type = 3 GROUP BY user_id HAVING count(1) > 1
需求:數據用到了ORDER BY然后分頁查詢的時候就需要去重然后再計數。
Distinct的作用是用於從指定集合中消除重復的元組,經常和count搭檔工作,語法如下
COUNT( { [ ALL | DISTINCT ] expression ] | * } )
這時,可能會碰到如下情況,你想統計同時有多列字段重復的數目,你可能會立馬想到如下方法:
select count( 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
這種解決方案在某些情況還是挺方便的,雖然效率不高
轉載自: http://www.cnblogs.com/xiepeixing/archive/2012/04/18/2583955.html
參考: https://www.cnblogs.com/wslook/