The following will get you the assignment answer. There are many ways to solve this, and it is not necessarily bad to group several times in sub-queries. Most RDBMS engines will be able to optimize your query (some) and performance is likely not an issue for this particular question.
SELECT TOP (1)
,AVG(SumSalary) OVER(PARTITION BY NULL) AS AvgSalary
,SUM(Salary) AS SumSalary
GROUP BY Department
WHERE SumSalary > AvgSalary
ORDER BY SumSalary DESC
I'd suggest that you read up on
Window Functions so that you can fully explain any work submitted (there are plenty of sites and technical documentation for each DB and ANSI SQL).
Also note that a
TOP (1) gets just the single highest paying department that is above the average, since you may have many that meet this criteria. To ensure you get the highest paying the
ORDER BY guarantees the highest paying is on top. You still have the possibility of two departments paying the same amount though in which case you have a non-deterministic query (not guaranteed to get the same department every time). You need a tie-breaker unless you accept this potential for random results or it is guaranteed not to happen by some other business process or rule (yeah right!).