BIT_OR函数的妙用
使用的是官方文档的例子。参考地址:https://dev.mysql.com/doc/refman/8.0/en/calculating-days.html
1. 先看例子
1、假设有如何的表(year,month,day字段分别表示年、月、日)
CREATE TABLE t1 (year YEAR, month INT UNSIGNED,day INT UNSIGNED);
2、我们往表里面插入一些数据(每一行表示2000年2月23号访问了)
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),(2000,2,23),(2000,2,23);
3、要求是统计每个月访问了多少次。
分析:正常情况下用group by就可以了,但是看看上面的数据,有2000年2月23有2个数据,但是只能统计一条官方通过”聚合函数“bit_or给了我们一个很好的使用例子
4、看官方的例子
SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1GROUP BY year,month;
- 先用group by分组:year,month
- 分组后,bit_or对每组的内容进行或操作:即
1<<2 | 1<<23 | 1<<23
。
bit_or分组函数操作后,重复的数据都把day字段的23bit位设置为1;
- 最后用bit_count统计出现了多少个1
2. 相关函数
- BIT_RO函数
BIT_OR在官方的说明里面属于 聚合函数
,也就是能和group by一起使用,对一组数据起作用。
下面附上聚合函数的表格14.19.1 Aggregate Function Descriptions
类似的聚合函数还有BIT_AND、BIT_XOR
- BIT_COUNT函数
BIT_COUNT函数只是普通的bit函数,不是聚合函数,看地址14.12 Bit Functions and Operators
3. 总结用法
对于需要二进制bit位的操作就是:聚合函数+二进制bit函数2板斧。
如:网络中的子网掩码、ip地址的处理等。