When do you need to group by more than one column, and what goes wrong if you group by too many?
You need multiple grouping columns whenever the answer you want has more than one dimension. "Revenue per customer" is one dimension. "Revenue per customer per status" is two. The rule is that the grouping columns are the dimensions of the report, and everything else is a measure computed on each combination.
Grouping by too many columns fragments the result. Add a third dimension and each group gets smaller, until you have one row per order and the aggregates are pointless. The symptom is a row count that looks far too high and totals that do not match the summary you expected. The fix is to group by exactly the dimensions the report needs and to aggregate the rest.
Grouping by too few columns is the opposite failure and it is quieter: rows from genuinely different categories get merged into one group, and the aggregate describes a population that does not exist. Adding a grouping column that looked redundant is often the right fix.
There is a subtlety about NULL in a grouping column. NULL groups together, so all rows where the column is missing collapse into a single group with a NULL label — which is usually what you want, but it means a NULL group is not excluded from a report unless you filter it.
On performance, the grouping columns should be the leading columns of a composite index if you have one, so the engine can produce the groups already sorted rather than sorting the whole table. And when you group by a date, remember that grouping by the raw timestamp column produces one group per distinct timestamp, which is almost never what a report wants — group by a truncated period instead.