MySQL之BIT_OR、BIT_COUNT函数
2022/2/14 2:15:42
本文主要是介绍MySQL之BIT_OR、BIT_COUNT函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.前言
最近在看MySQL官方文档时,发现一个很巧妙的用法,可以很快速地计算出用户每月的访问系统的天数。下面我们来分析一下原理。
2.数据准备
CREATE TABLE data_test (year YEAR, month INT UNSIGNED, day INT UNSIGNED); INSERT INTO data_test VALUES(2022,1,1),(2022,1,20),(2022,1,30),(2022,2,2),(2022,2,5),(2022,2,5);
从上面的建表语句和数据插入语句2022年的1月份的访问天数为3,2月份的访问天数为2。
按照常规的查询,可以按照下面的语句进行查询:
with a as (select `year`, `month` from data_test group by `year`, `month`) select b.`year`, b.`month`, count(distinct day) days from a left join data_test b on a.`month` = b.`month` and a.`year` = b.`year` group by b.`year`, b.`month`; +------+-------+------+ | year | month | days | +------+-------+------+ | 2022 | 1 | 3 | | 2022 | 2 | 2 | +------+-------+------+
3.数据查询
按照常规的做法,我们需要查询两次才能得出结果。其实我们有更简便的方法来查询,就是使用MySQL为我们提供的BIT_OR
、BIT_COUNT
函数。
SELECT `year`, `month`, BIT_COUNT(BIT_OR(1 << day)) AS days FROM data_test GROUP BY `year`, `month`; +------+-------+------+ | year | month | days | +------+-------+------+ | 2022 | 1 | 3 | | 2022 | 2 | 2 | +------+-------+------+
可以看到得到的结果和上面使用常规方法查询的结果一致,那么这两个函数的原理到底是什么呢?我们来一一分析。
-
BIT_OR
:该函数是用来进行位运算
中的或运算
的。 -
BIT_COUNT
:该函数是用来计算二进制数中1的个数的。 -
1 << day
:表示1向左移day个位。1 << 1
得到的值是0000 0000 0000 0000 0000 0000 0000 00101 << 20
得到的值是0000 0000 0001 0000 0000 0000 0000 00001 << 30
得到的值是0000 0001 0000 0000 0000 0000 0000 0000
对这3个值进行
或运算
的话,可以得到0000 0001 0001 0000 0000 0000 0000 0010,取1的个数为3
所以MySQL通过很巧妙的位运算来获得结果,同时也提高了性能。
最后,欢迎关注微信公众号一起交流
这篇关于MySQL之BIT_OR、BIT_COUNT函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29阿里 Canal 实时同步 MySQL 增量数据至 ClickHouse 数据库
- 2024-05-24在Linux下管理MySQL的大小写敏感性
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7