免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1833 | 回复: 0
打印 上一主题 下一主题

mysql中BIT_COUNT的统计使用 [复制链接]

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-20 09:22 |只看该作者 |倒序浏览
下面的例子显示了如何使用位组函数来计算每个月中用户访问网页的天数。
CREATE

TABLE
t1 (
year

YEAR
(
4
),
month

INT
(
2
) UNSIGNED ZEROFILL,
            
day

INT
(
2
) UNSIGNED ZEROFILL);
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

|
   
01

|
   
3

|
|

2000

|
   
02

|
   
2

|
+
--
----+-------+------+
该查询计算了在表中按年
/
月组合的不同天数,可以自动去除重复的询问。
上面例子中的查询语句:
SELECT year,month,BIT_COUNT(BIT_OR(1


中的”BIT_COUNT(BIT_OR(1
“用法比较有技巧。
1、BIT_COUNT( expr
):返回 expr
的二进制表达式中”1“的个数。
          例如:29 = 11101 则:BIT_COUNT(29)= 4;
2、BIT_OR( expr
):返回 expr
     中所有比特的bitwise OR。计算执行的精确度为64比特(BIGINT)    。

   
例如:上面例子中,2000年02月中有一条2号的记录两条23号的记录,所以"1<<day"表示出来就是
“1<<2”和“1<<23”,得到二进制数 100 和 100000000000000000000000 。然后再OR运算。即 100 OR
10000000000000000000000 OR
10000000000000000000000 =
100000000000000000000100;这样再用BIT_COUNT处理得出的值就是2,自动去除了重复的日期。

               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/90603/showart_2000854.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP