A computer implemented method for performing parallelized aggregation, comprising: separating an input table (500, 605) storing relational data into a plurality of partitions (610, 615); generating, by each of a plurality of aggregator threads (620, 625) operating concurrently, a local hash table (220, 630, 635) for each of the partitions, each local hash table (220, 630, 635, 645, 650, 655, 660) storing key - index pairs, wherein the key - index pairs are generated by mapping each distinct key from a column of a partition to a unique integer representing the index, aggregating values of each of the partitions (610, 615) into the local hash tables (220, 630, 635), wherein the mapping is used to group and condense relational data stored in a partition (610, 615) so that the index points to a value array including an intermediate result of the aggregation; merging, based on designated key values (665, 670) of the local hash tables (220, 630, 635, 645, 650, 655, 660) assigned to each thread of a plurality of merger threads (662, 664), the local hash tables (220, 630, 635, 645, 650, 655, 660), by the plurality of merger threads (662, 664) operating concurrently, wherein the plurality of merger threads (662, 664) processes hash-disjoint partitions of data of the local hash tables (220, 630, 635, 645, 650, 655, 660) to produce a set of disjoint result hash tables (675, 680), wherein each of the plurality of merger threads (662, 664) processes a dedicated range of key values (665, 670) of all of the local hash tables (220, 630, 635, 645, 650, 655, 660); and generating a global result by concatenating the set of disjoint result hash tables (675, 680) produced by the plurality of merger threads (662, 664). separating an input table (500, 605) storing relational data into a plurality of partitions (610, 615); generating, by each of a plurality of aggregator threads (620, 625) operating concurrently, a local hash table (220, 630, 635) for each of the partitions, each local hash table (220, 630, 635, 645, 650, 655, 660) storing key - index pairs, wherein the key - index pairs are generated by mapping each distinct key from a column of a partition to a unique integer representing the index, aggregating values of each of the partitions (610, 615) into the local hash tables (220, 630, 635), wherein the mapping is used to group and condense relational data stored in a partition (610, 615) so that the index points to a value array including an intermediate result of the aggregation; merging, based on designated key values (665, 670) of the local hash tables (220, 630, 635, 645, 650, 655, 660) assigned to each thread of a plurality of merger threads (662, 664), the local hash tables (220, 630, 635, 645, 650, 655, 660), by the plurality of merger threads (662, 664) operating concurrently, wherein the plurality of merger threads (662, 664) processes hash-disjoint partitions of data of the local hash tables (220, 630, 635, 645, 650, 655, 660) to produce a set of disjoint result hash tables (675, 680), wherein each of the plurality of merger threads (662, 664) processes a dedicated range of key values (665, 670) of all of the local hash tables (220, 630, 635, 645, 650, 655, 660); and wherein the plurality of merger threads (662, 664) processes hash-disjoint partitions of data of the local hash tables (220, 630, 635, 645, 650, 655, 660) to produce a set of disjoint result hash tables (675, 680), wherein each of the plurality of merger threads (662, 664) processes a dedicated range of key values (665, 670) of all of the local hash tables (220, 630, 635, 645, 650, 655, 660); and generating a global result by concatenating the set of disjoint result hash tables (675, 680) produced by the plurality of merger threads (662, 664).