Calculating Visits Per Day You can also solve the problem efficiently by using a  UNION  that combines the output of two separate SELECT  statements. See Section 13.2.10.3, “UNION Clause” . Each  SELECT  searches only one key and can be optimized: The following example shows how you can use the bit group functions to calculate the number of days per month a user has visited a Web page. The example table contains year-month-day values representing visits by users to the page. To determine how many different days in each month these visits occur, use this query: The query calculates how many different days appear in the table for each year/month combination, with automatic removal of duplicate entries. The  AUTO_INCREMENT  attribute can be used to generate a unique identity for new rows: Which returns: Which returns: SELECT field1_index, field2_index FROM test_table WHERE field1_index = ’1’ UNION SELECT field1_index, field2_index FROM test_table WHERE field2_index = ’1’; 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 | +------+-------+------+ +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | 333 CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES (’dog’),(’cat’),(’penguin’), (’lax’),(’whale’),(’ostrich’); SELECT * FROM animals; 3.6.9 Using AUTO_INCREMENT 3.6.8 Calculating Visits Per Day