Mysql版本:8.0.13
解决问题:如何使用位组功能计算用户访问网页的每月天数
表: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);
查看表:
bit_count:统计二进制数1个个数
bit_or:二进制数按位或
使用语句:
select year,month,BIT_COUNT(BIT_OR(1<<DAY)) as days from t1 group by year,month;
结果:
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:
没有去重,错误
使用group by
需要使用两次group by
注释:
$a << $b | Shift left(左移) | 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 |