mysql手冊中關於如何使用位組函數來計算每月中用戶訪問網頁的天數mysql
首先執行sql建表sql
- CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
- day INT(2) UNSIGNED ZEROFILL);
- INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
- (2000,2,23),(2000,2,23);
執行按照年月組合的不一樣天數,能夠自動去除重複的詢問。ide
- SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
- GROUP BY year,month;
bit_count能夠統計出二進制表達式中1的個數:18 = 11101 則:BIT_COUNT(18)= 2;函數
bit_or 2000年02月中有一條2號的記錄兩條23號的記錄,因此"1<<day"表示出來就是
「1<<2」和「1<<23」,獲得二進制數 100 和 100000000000000000000000 。而後再OR運算。即 100 OR
10000000000000000000000 OR
10000000000000000000000 =
100000000000000000000100;這樣再用BIT_COUNT處理得出的值就是2,自動去除了重複的日期。
spa
很重要的一點是,關於mysql對group語法的處理,count(*)計算個數,bit_or(day)則是將一組數據進行位的or處理!!!!
it