A method comprising: receiving a request to aggregate data grouped by a first column; in response to receiving the request, loading values from the first column into an input cache; wherein the values loaded into the input cache include values, from the first column, from a set of rows; programming, in response to receiving the request, a filter unit with logic to perform a comparison between: a particular value, from the first column of a first row, and values in the first column of a plurality of rows, of the set of rows; based on the comparison of the particular value to values in the first column of the plurality of rows, generating a predicate result that identifies rows, within the plurality of rows, that have values in the first column that match the particular value; wherein the predicate result is a bitvector and each bit of the bitvector corresponds to a corresponding row of the set of rows; wherein generating the predicate result comprises: setting a bit of the bitvector to a first bit value when a value of the corresponding row matches the particular value; setting a bit of the bitvector to a second bit value when the value of the corresponding row does not match the particular value; wherein the bitvector is a first bitvector in a set of bitvectors; generating an aggregate value for a second column by aggregating values, from the second column, of each of the rows identified by the predicate result; selecting a second row, from the set of rows, for which the corresponding bit has not been set to the first bit value in any bitvector (730, 732, 734) of the set of bitvectors; programming the filter unit with logic to perform a comparison between: a second value, from the first column of the second row, and values in the first column of a second plurality of rows, of the set of rows; based on the comparison of the second value to values in the first column of the second plurality of rows, generating a second bitvector that identifies rows, within the second plurality of rows, that have values in the first column that match the second value; and generating a second aggregate value for the second column by aggregating values, from the second column, of each of the rows identified by the second bitvector; wherein the method is performed by one or more computing devices. receiving a request to aggregate data grouped by a first column; in response to receiving the request, loading values from the first column into an input cache; wherein the values loaded into the input cache include values, from the first column, from a set of rows; programming, in response to receiving the request, a filter unit with logic to perform a comparison between: a particular value, from the first column of a first row, and values in the first column of a plurality of rows, of the set of rows; a particular value, from the first column of a first row, and values in the first column of a plurality of rows, of the set of rows; based on the comparison of the particular value to values in the first column of the plurality of rows, generating a predicate result that identifies rows, within the plurality of rows, that have values in the first column that match the particular value; wherein the predicate result is a bitvector and each bit of the bitvector corresponds to a corresponding row of the set of rows; wherein generating the predicate result comprises: setting a bit of the bitvector to a first bit value when a value of the corresponding row matches the particular value; setting a bit of the bitvector to a second bit value when the value of the corresponding row does not match the particular value; setting a bit of the bitvector to a first bit value when a value of the corresponding row matches the particular value; setting a bit of the bitvector to a second bit value when the value of the corresponding row does not match the particular value; wherein the bitvector is a first bitvector in a set of bitvectors; generating an aggregate value for a second column by aggregating values, from the second column, of each of the rows identified by the predicate result; selecting a second row, from the set of rows, for which the corresponding bit has not been set to the first bit value in any bitvector (730, 732, 734) of the set of bitvectors; programming the filter unit with logic to perform a comparison between: a second value, from the first column of the second row, and values in the first column of a second plurality of rows, of the set of rows; a second value, from the first column of the second row, and values in the first column of a second plurality of rows, of the set of rows; based on the comparison of the second value to values in the first column of the second plurality of rows, generating a second bitvector that identifies rows, within the second plurality of rows, that have values in the first column that match the second value; and generating a second aggregate value for the second column by aggregating values, from the second column, of each of the rows identified by the second bitvector; wherein the method is performed by one or more computing devices.