Mysql中較為複雜的分組統計去重複值

2021-09-07 14:26:51 字數 2060 閱讀 5672

/

/求出分組統計

$att = $result->execute(

"select userid ,

count

(userid)

as total,name from

(select

distinct userid,name from att_sumbase where

time

between

'11:30'

and'12:30' union all select

distinct userid,name from att_sumbase where

time

between

'17:30'

and'18:30' order by userid)

as foo group by userid");

//求得總數

$sum

= $result->execute(

"select

sum(

sum)

as allnum from

(select userid,

count

(distinct userid)

assum

,date

,time

,name from att_sumbase where

time

between

'11:30'

and'12:30' union all select userid,

count

(distinct userid)

assum

,date

,time

,name from att_sumbase where

time

between

'17:30'

and'18:30'

)as foo");

在處理乙個大資料量資料庫的時候

突然發現mysql對於count(*)的不同處理會造成不同的結果

比如執行

select count(*) from tablename

即使對於千萬級別的資料mysql也能非常迅速的返回結果

而對於select count(*) from tablename where.....

mysql的查詢時間開始攀公升

仔細查閱累下手冊,發現當沒有where語句對於整個mysql的表進行count運算的時候

myisam型別的表中儲存有總的行數,而當新增有where限定語句的時候mysql需要對整個表進行檢索

從而得出count的數值

突然又想起來看到的不少新興的php程式對於count的處理並沒有很好的意識到這點

記錄下順便提下mysql的distinct的關鍵字有很多你想不到的用處

1.在count 不重複的記錄的時候能用到

比如select count( distinct id ) from tablename;

就是計算talbebname表中id不同的記錄有多少條

2,在需要返回記錄不同的id的具體值的時候可以用

比如select distinct id from tablename;

返回talbebname表中不同的id的具體的值

3.上面的情況2對於需要返回mysql表中2列以上的結果時會有歧義

比如select distinct id, type from tablename;

實際上返回的是 id與type同時不相同的結果,也就是distinct同時作用了兩個字段,必須得id與tyoe都相同的才被排除了,與我們期望的結果不一樣

4.這時候可以考慮使用group_concat函式來進行排除,不過這個mysql函式是在mysql4.1以上才支援的

5.其實還有另外一種解決方式,就是使用

select id, type, count(distinct id) from tablename

雖然這樣的返回結果多了一列無用的count資料(或許你就需要這個我說的無用資料)

返回的結果是 只有id不同的所有結果和上面的4型別可以互補使用,就是看你需要什麼樣的資料了

一段oracle中的「複雜」分組統計sql

要求 呼叫系統 call center 每天會有大量的 進線資料,領導們要檢視每天的進線數彙總,並且要求把 每天從上午8點到上午12點以及下午2點到晚上8點這兩個時間段的資料彙總 視 為當天的資料。即分組依據 思路 把時間段折分成連續二段,一段是從當天08 00到11 59分的資料,一段是當日12 ...

mysql 區間分組統計

select elt interval c.money,0,1000,2000,3000,4000,5000 less 1000 1000to2000 2000to3000 3000to4000 4000to5000 as level,count c.id as cnt from select su...

Mysql橫向分組統計

有這麼一張表trade,記錄著毛巾和枕頭的交易資訊,表結構如圖a a 目前的資料如圖b b 現在要查詢出每天每個商品交易的總價,如下圖所示 c 那麼該如何查詢呢?方法不唯一,這裡先列舉了一種方法 select date format created time,y m d as 日期 sum if p...