• BIT_COUNT(BIT_OR( )) (zz)


    下面的例子显示了如何使用位组函数来计算每个月中用户访问网页的天数: 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<<day)) AS days FROM t1 GROUP BY year,month; 中的”BIT_COUNT(BIT_OR(1<<day))

    用法比较有技巧。

    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,自动去除了重复的日期。

     
     
  • 相关阅读:
    【译】.NET 的新的动态检测分析
    【译】Visual Studio 的 Razor 编辑器的改进
    【译】.NET 5. 0 中 Windows Form 的新特性
    MySQL InnoDB 索引(Index)
    MySQL 全文检索(Full-Text Search)
    MySQL 计算最大值、最小值和中位数
    MySQL 触发器(Triggers)
    MySQL 视图(View)
    MySQL基础知识:MySQL String 字符串处理
    MySQL基础知识:MySQL Connection和Session
  • 原文地址:https://www.cnblogs.com/peggy89321/p/2974767.html
Copyright © 2020-2023  润新知