`

BIT_COUNT()&BIT_OR()

 
阅读更多
在学习MySQL手册时,看到根据天数计算访问量时,出现了BIT_COUNT()和BIT_OR()两个函数来处理天数计算的问题

所使用的表格信息如下:

mysql> select year,month,day from t1;
+------+-------+------+
| year | month | day  |
+------+-------+------+
| 2000 |    01 |   01 |
| 2000 |    01 |   20 |
| 2000 |    01 |   30 |
| 2000 |    02 |   02 |
| 2000 |    02 |   23 |
| 2000 |    03 |   13 |
| 2000 |    02 |   23 |
+------+-------+------+
7 rows in set (0.00 sec)

在处理这个问题时,起初我也没有多想,无非是根据每个月的天数输出访问量,于是我做了如下的查询:

mysql> select year,month,count(day) as day from t1 group by
    -> year,month;
+------+-------+-----+
| year | month | day |
+------+-------+-----+
| 2000 |    01 |   3 |
| 2000 |    02 |   3 |
| 2000 |    03 |   1 |
+------+-------+-----+
3 rows in set (0.02 sec)

但是,此时我发现2月份有两个2月23日,这样没有去掉重复的天数,导致结果错误,看了手册的查询过程如下:

mysql> 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 |
| 2000 |    03 |    1 |
+------+-------+------+
3 rows in set (0.02 sec)

它使用了BIT_COUNT()和BIT_OR()两个函数,这两个函数的用法如下:

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

但是,我觉得这种使用2进制来进行计算的方法有些麻烦,我采用了一下的办法来解决这个问题:

mysql> select year,month,count(distinct day) as day from t1 group by
    -> year,month;
+------+-------+-----+
| year | month | day |
+------+-------+-----+
| 2000 |    01 |   3 |
| 2000 |    02 |   2 |
| 2000 |    03 |   1 |
+------+-------+-----+
3 rows in set (0.02 sec)

分享到:
评论

相关推荐

    Bin_count_8bit.rar_Bin_Count_bin_bin count

    标题中的“Bin_count_8bit.rar”暗示了我们即将探讨的是与二进制计数,特别是8位二进制计数相关的内容。8位二进制计数在计算机科学和IT领域中非常重要,因为它是大多数现代计算机系统的基本数据单位。这里的“rar”...

    cpu的简单设计

    reg [20:0] count = 21'b0; Instruction_Mem instruction(clock,reset,i_addr,i_datain); PCPU pcpu(clock, enable, reset, start, d_datain, i_datain, select_y, i_addr, d_addr, d_dataout, d_we, y); ...

    Simple_3bit_counter.zip_simple

    在Verilog中,这可以通过always块实现,如`always @(posedge clk or negedge reset_n) begin...end`。在时钟的上升沿(posedge clk),计数器的当前状态会被更新。如果复位信号有效(低电平),计数器会回到起始状态...

    ex11_FPGAverilog_uart_

    bit_count &lt;= bit_count + 1; // 计数器加一 end else begin bit_count ; // 检测到停止位,重置计数器 valid_data ; // 清除数据有效标志 end end endmodule ``` 对于UART发送模块,原理类似,但需要控制...

    sd-reader_source_25218_TheCount_ATmega32128P_

    Implement renaming a file or directory.Rewrite byteorder handling to fix unaligned memory accesses on 32-bit and probably 16-bit architectures.Make fat_create_file() not return failure if the file ...

    wb_lpc_latest.tar.gz_And Yet ..._LPC BIT I/O_VHDL DMA_WISHBONE L

    Wishbone to LPC (Low-Pin Count) Bridge, includes master and slave modules. Supports 8-bit I/O Read and Write cycles, 8-bit Memory Read/Write cycles, DMA cycles, and up to 32-bit Firmware memory read/...

    BIos原代码《陈文钦》

    HARD RESET OR SHUTDOWN RESET ; ;---------------------------------------; ; SHUTDOWN PROCESSING ; ;---------------------------------------; bios_suru: cli ; test under CLI mode cld ; ensure ...

    A.Collection.of.Bit.Programming.Interview.Questions.solved.in.C++

    Compute whether or not an unsigned number is a power of two Chapter 4. Set the i-th bit Chapter 5. Unset the i-th bit Chapter 6. Toggle the i-th bit Chapter 7. Given an unsigned number with only one ...

    Iverilog安装包+计数器实现.rar

    always @(posedge clk or posedge reset) begin if (reset) count ; else count &lt;= count + 4'b1; end endmodule ``` 对于8位计数器,它能表示0到255的数值,代码会更加复杂,因为需要处理溢出情况。当计数...

    Introduction to 64Bit Windows Assembly

    One chapter covers how to efficiently count the 1 bits in an array with the most efficient version using the recently-introduced popcnt instruction. Another chapter covers using SSE instructions to ...

    C语言按位运算符详解

    // Exclusive OR the bits of x and y ``` 执行后,`z`的值为11(二进制表示为1011)。 ##### 4. 按位取反(~) 按位取反运算符将一个操作数中的每一位0变为1,1变为0。 例如: ```c int x = 13; // 00001101 int...

    python实现位操作 Bit Manipulation 课程设计

    python实现: 二进制和运算符 二进制计数设置位 二进制计数尾随零 二进制或运算符 二进制移位 二进制二进制补码 二进制异或运算符 计数 1S 布赖恩·克尼汉方法 计算 1 位数 ... Highest Set Bit

    单片机程序设计 电子钟程序

    CLOSE_BIT EQU 40H ;显示屏蔽(和位选相与后送P2) A1_MINUTE EQU 41H ;闹铃1 分钟 A1_HOUR EQU 42H ;闹铃1 小时 A1_SWITCH EQU 43H ;闹铃1 开关 A2_MINUTE EQU 44H ;闹铃2 分钟 A2_HOUR EQU 45H ;闹铃2...

    Mysql函数手册.rar_MySQL函数手册_VZI_mysql 函数手册

    7. 位操作函数:如BIT_AND()、BIT_OR()和BIT_XOR()用于进行二进制位运算。 8. 信息函数:如DATABASE()返回当前数据库名,USER()获取当前用户名,VERSION()显示MySQL版本信息。 手册还可能包含关于聚合函数(如...

    25.4 MySQL 函数

    2. **位操作**:`BIT_AND()`, `BIT_OR()`, `BIT_XOR()`进行位运算,`BIT_COUNT()`计算位集中的1的个数。 这些函数在实际开发中非常常用,理解并熟练运用它们能极大地提高数据库操作的效率。例如,在数据分析时,...

    前端开源库-fast-bitfield

    - 位操作通常包括设置、清除、检查某一位的状态,以及进行位与(AND)、位或(OR)、位异或(XOR)等布尔运算。 - 在JavaScript中,由于语言的限制,直接处理位操作较为复杂,而`fast-bitfield`则提供了一种简洁的...

    异或运算

    - **循环移位**:通过异或运算,可以实现数据的循环左移(A &lt;&lt; n XOR A &gt;&gt; (bit_count-n))和循环右移(A &gt;&gt; n XOR A (bit_count-n))。 - **错误检测**:CRC(Cyclic Redundancy Check)校验码就是基于异或运算,...

    一个win32下的ARM开源编译器

    (32-bit) or narrow (16-bit) encodings. If the instruction cannot be encoded in the desired width fasmarm will give an error. If the instruction does not have both wide an narrow forms then the .W and ...

    CR0120 MAX1104 DAC Controller.PDF

    - **DATA (I):** An 8-bit data bus for receiving data from the host device (such as a microcontroller or memory). This data is intended for transmission to the CODEC. 3. **CODEC Interface Signals:** ...

    zynq_canutils.zip

    receive lists, their filters and the count of filter matches can be checked in the appropriate receive list. All entries contain the device and a protocol module identifier: $ cat /proc/...

Global site tag (gtag.js) - Google Analytics