Mysql 之BIT_COUNT BIT_OR

sisophon 2019-10-16 PM 63℃ 0条

解决问题:如何使用位组功能计算用户访问网页的每月天数
表:t1

创建表语句:

CREATE TABLE `t1` (
  `year` year(4) DEFAULT NULL,
  `month` int(2) unsigned zerofill DEFAULT NULL,
  `day` int(2) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 

插入语句:

INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23);

查看表:
001.png
bit_count:统计二进制数1个数

bit_or:二进制数按位或

使用语句:

select year,month,BIT_COUNT(BIT_OR(1<<DAY)) as days from t1 group by year,month;

结果:
002.png
解析:
1<<day :  

举个栗子:

    01   1
    02   100
    23    100……后面23个0

    BIT_OR(1<<DAY)

    02            100

   -------------------------
    23      10000……23个0

    1000……1……

结果两个1.

BIT_COUNT:
      统计1的个数,所以2月份2天 1月份3天
使用count:
003.png
没有去重,错误
使用group by:
004.png
需要使用两次group by

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~