【MySQL】BIT_OR函数在二进制分组group by中的妙用

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 t1
       GROUP 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地址的处理等。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值