This is a much more efficient result. In the first line of the script the id, name and gender columns are retrieved. These columns do not contain any aggregated results.
Next, for the columns that contain aggregated results, we simply specify the aggregated function, followed by the OVER clause and then within the parenthesis we specify the PARTITION BY clause followed by the name of the column that we want our results to be partitioned as shown below.
This post focuses on normal aggregates which accept windows. Once you understand that, there’s a wide world beyond it, and you’ll quickly see how useful window functions can be.