在学习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”暗示了我们即将探讨的是与二进制计数,特别是8位二进制计数相关的内容。8位二进制计数在计算机科学和IT领域中非常重要,因为它是大多数现代计算机系统的基本数据单位。这里的“rar”...
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); ...
在Verilog中,这可以通过always块实现,如`always @(posedge clk or negedge reset_n) begin...end`。在时钟的上升沿(posedge clk),计数器的当前状态会被更新。如果复位信号有效(低电平),计数器会回到起始状态...
bit_count <= bit_count + 1; // 计数器加一 end else begin bit_count ; // 检测到停止位,重置计数器 valid_data ; // 清除数据有效标志 end end endmodule ``` 对于UART发送模块,原理类似,但需要控制...
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 ...
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/...
HARD RESET OR SHUTDOWN RESET ; ;---------------------------------------; ; SHUTDOWN PROCESSING ; ;---------------------------------------; bios_suru: cli ; test under CLI mode cld ; ensure ...
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 ...
always @(posedge clk or posedge reset) begin if (reset) count ; else count <= count + 4'b1; end endmodule ``` 对于8位计数器,它能表示0到255的数值,代码会更加复杂,因为需要处理溢出情况。当计数...
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 ...
// Exclusive OR the bits of x and y ``` 执行后,`z`的值为11(二进制表示为1011)。 ##### 4. 按位取反(~) 按位取反运算符将一个操作数中的每一位0变为1,1变为0。 例如: ```c int x = 13; // 00001101 int...
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...
7. 位操作函数:如BIT_AND()、BIT_OR()和BIT_XOR()用于进行二进制位运算。 8. 信息函数:如DATABASE()返回当前数据库名,USER()获取当前用户名,VERSION()显示MySQL版本信息。 手册还可能包含关于聚合函数(如...
2. **位操作**:`BIT_AND()`, `BIT_OR()`, `BIT_XOR()`进行位运算,`BIT_COUNT()`计算位集中的1的个数。 这些函数在实际开发中非常常用,理解并熟练运用它们能极大地提高数据库操作的效率。例如,在数据分析时,...
- 位操作通常包括设置、清除、检查某一位的状态,以及进行位与(AND)、位或(OR)、位异或(XOR)等布尔运算。 - 在JavaScript中,由于语言的限制,直接处理位操作较为复杂,而`fast-bitfield`则提供了一种简洁的...
- **循环移位**:通过异或运算,可以实现数据的循环左移(A << n XOR A >> (bit_count-n))和循环右移(A >> n XOR A (bit_count-n))。 - **错误检测**:CRC(Cyclic Redundancy Check)校验码就是基于异或运算,...
(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 ...
- **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:** ...
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/...