MySQL位组函数使用

数据库 专栏收录该内容
95 篇文章 0 订阅

下面是官方文档:

挺有意思的一个东西,自己没见过,当时看不懂,今天研究了一下。

3.6.8计算每天访问次数

下面的示例演示如何使用位组函数计算用户每月访问网页的天数。

CREATE TABLE t1 (year YEAR, month INT UNSIGNED,
             day INT UNSIGNED);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
            (2000,2,23),(2000,2,23);

示例表包含表示用户访问页面的年度月日值。若要确定每月进行这些访问的天数,请使用以下查询:

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
       GROUP BY year,month;

返回:

+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 |     1 |    3 |
| 2000 |     2 |    2 |
+------+-------+------+

该查询计算每个年度/月组合的表中显示的不同天数,并自动删除重复项。

 

研究内容:

  1. <<
  2. BIT_OR
  3. BIT_COUNT

先看我写的例子,用来验证每个函数的作用。

SELECT *, BIN(DAY), BIT_COUNT(DAY), BIN(1<< DAY), LENGTH(BIN(1<< DAY)) FROM t1;

 

首先是<<,1<<day,将1右移day位。

然后是BIT_OR,把上面的内容左对齐,会发现如果BIT_OR(1<< DAY)得到的结果。

结果中每一位都代表了一天,1代表了这天有数据,并且这个函数还省去了去重的操作。

BIT_COUNT函数统计1的个数,因为每个位上的1代表当天有数据,所以,统计有数据的位的数量就是天数了。

SELECT *, BIN(DAY), BIT_COUNT(DAY), BIN(1<< DAY), LENGTH(BIN(1<< DAY)) FROM t1;
SELECT YEAR, MONTH, BIN(BIT_OR(1<< DAY)),BIT_COUNT( BIT_OR(1<< DAY)) FROM t1 GROUP BY YEAR, MONTH;
SELECT *  FROM t1;

 

总结:上面的官方语句可以看出,聚合函数之后还可以使用普通的函数进行处理。位聚合函数我是第一次使用,并且位函数应该会有64位的限制,应该是只能用他来代表小于64位的每月几号。

 

正数和负数的二进制相加得到的结果是0。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值