关于mysql手册中的位组函数

mysql手册中关于如何使用位组函数来计算每个月中用户访问网页的天数

首先执行sql建表

  
  
  
  
  1. CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, 
  2.              day INT(2) UNSIGNED ZEROFILL); 
  3. INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), 
  4.             (2000,2,23),(2000,2,23); 

执行按照年月组合的不同天数,可以自动去除重复的询问。

  
  
  
  
  1. SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 
  2.        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,自动去除了重复的日期。

很重要的一点是,关于mysql对group语法的处理,count(*)计算个数,bit_or(day)则是将一组数据进行位的or处理!!!!
       

你可能感兴趣的:(数据库,mysql,职场,休闲)