mysql中bit_count和bit_or函数的含义
2016-05-30 16:13
423 查看
翻阅mysql手册时,看到有个示例使用了bit_or方法来去除重复的数据,一开始没看明白,后来看明白之后感觉非常巧妙。示例要实现的功能就是计算每月有几天有访问,先把示例摘录在这里。
测试数据截图如下:
mysql中bit_count和bit_or函数测试
从上面的数据可以看出,1月份有3天有访问,2月份有2天访问。如果用group by来计算,需要使用两次,笔者自己写了个sql语句:
就是先按照year,month,day分组计算一次,将结果当成临时表再按照year,month分组计算一次。
官方手册上使用的这样的语句:
咋一看不太明白了,后来弄清了bit_or和bit_count函数的含义后就豁然开朗了。
bit_count函数的含义
用来计算二进制数中包含1的个数。
因为10转成二进制是1010,所以该结果就是2。
bit_or函数的含义
就是对两个二进制数进行或运算。如:
上面例子中当计算2月份的访问天数时,
再用bit_count一算就是2了,非常巧妙。
小结
上面使用了两种sql语句来实现这个功能,用distinct对天数去重也是可以实现该功能,只是3种sql语句哪个执行效率更快呢?
原文地址: http://www.01happy.com/mysql-bit_count-bit_or/
mysql中bit_count和bit_or函数测试
从上面的数据可以看出,1月份有3天有访问,2月份有2天访问。如果用group by来计算,需要使用两次,笔者自己写了个sql语句:
官方手册上使用的这样的语句:
bit_count函数的含义
用来计算二进制数中包含1的个数。
bit_or函数的含义
就是对两个二进制数进行或运算。如:
1100 或 0101 -------------- 1101
上面例子中当计算2月份的访问天数时,
(1<< 02) | (1 << 23) | (1<<23) = 100 | 1000...(23个0)| 1000...(23个0) = 1000...100
再用bit_count一算就是2了,非常巧妙。
小结
上面使用了两种sql语句来实现这个功能,用distinct对天数去重也是可以实现该功能,只是3种sql语句哪个执行效率更快呢?
原文地址: http://www.01happy.com/mysql-bit_count-bit_or/
相关文章推荐
- MySQL使用INSERT插入多条记录
- mysql 创建存储过程注意
- mysql 批量创建表,利用存储过程
- mysql 左连接右连接问题
- mysql 5.7.12编译参数
- MYSQL 大批量数据插入
- mysql 学习笔记5-- 数据库优化
- 六个强大的PHP/MYSQL代码生成器介绍
- Hive安装与配置--- 基于MySQL元数据
- MySQL 加锁处理分析
- MySQL学习之——利用MySQL判断操作系统版本
- MySQL日志——Undo | Redo
- MySQL的删除
- MySql Null注意事项
- MySQL 语句遇到关键字
- windows 下安装mysql 5.6.24版本
- Mysql之pt-online-schema-change在线更新大表加索引
- MYsql 常用命令
- MySQL(Unix时间戳、日期)转换函数
- MySQL学习总结(五)表数据查询