/
/求出分組統計
$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...