1. A method, comprising: obtaining a data stream; obtaining a set of aggregate queries to be executed on the data stream; and generating a query plan for executing the set of aggregate queries on the data stream, wherein the generated query plan comprises generating at least one intermediate aggregate query, wherein the intermediate aggregate query combines a subset of aggregate queries from the set of aggregate queries so as to pre-aggregate data from the data stream prior to execution of the subset of aggregate queries such that the generated query plan is optimized for computational expense based on a given cost model; wherein the generated query plan comprises a tree structure, the query plan generating step further comprises determining an optimal query plan with a lowest computation cost by determining a minimum-cost aggregate tree, and the minimum-cost aggregate tree is determined using a heuristic which adds one or more random aggregate queries to the aggregate tree to form an expanded aggregate graph, and uses a directed Steiner tree heuristic to find the minimum-cost aggregate subtree of the expanded aggregate graph; wherein the generation of the query plan is implemented by executing one or more software programs on a processor device.