mysql按位与_MySQL按位操作应用实例 | 学步园

(书摘备查)

实例一

问题提出:

假设有这样一个任务:一个超市需要记录每个顾客每次来超市都购买了哪些商品。为了将问题简单化,假设该超市是有面包、牛奶、饼干、啤酒四种商品。

解决方案:

用一个字段表示顾客购买商品的信息,这个字段是数值型的,存储一个十进制数字。当它转换成二进制的时候,每一位代表一种商品,如果所在位是“1”表示顾客购买了该种商品,“0”表示没有购买该种商品。比如数值的第一位代表面包,第二位代表牛奶,第三位代表饼干,第四位代表啤酒。如果一个顾客购物单的商品列的数值是5,那么二进制表示为0101,这样从左往右第二位和第四位是1,那么就可以知道这个顾客购买了牛奶和啤酒,而如果这个顾客有这样的购物单(在数据库中就是多条记录),则把这些购物单按用户分组做bit_or()操作就可以知道这个用户都购买过什么商品。

create table order_rab (id int, customer_id int, kind int);

insert into order_rab values (1,1,5), (2,1,4);

insert into order_rab values (3,2,3), (4,2,4);

select * from order_rab;

用bit_or()函数与group by子句统计每个顾客购买过什么商品:

select customer_id, bit_or(kind) from order_rab group by customer_id;

可以看到顾客1的bit_or()结果是5即0101,表示这个顾客在本超市购买过牛奶和啤酒;顾客2的bit_or()结果是7即0111

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值