mySQL去重和計數


在工作中用到了,就返回來看看。

首先查詢數據庫中重復數據示例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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM