------+-----------+------------+ | 100 | 111 | 101 | +------------+-----------+------------+ As an aggregate function: CREATE TABLE vals2 (category VARCHAR(1), x INT); INSERT INTO vals2 VALUES ('a',111),('a',110),('a',100), ('b','000'),('b',001),('b',011); SELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals GROUP BY category; +----------+------------+-----------+------------+ | category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) | +----------+------------+-----------+------------+ | a | 100 | 111 | 101 | | b | 0 | 11 | 10 | +----------+------------+-----------+------------+ No match: SELECT BIT_AND(NULL); +----------------------+ | BIT_AND(NULL) | +----------------------+ | 18446744073709551615 | +----------------------+ URL: https://mariadb.com/kb/en/bit_and/https://mariadb.com/kb/en/bit_and/