Answer: Using RANK()
Find a detailed explanation of using RANK() in SQL.
Solution
The solution is given below:
-- The query to rank the records using RANK()SELECT PC.CategoryName,SUM(S.SalesAmount) AS TotalSales,RANK() OVER (ORDER BY SUM(S.SalesAmount) DESC) AS 'Rank'FROM ProductCategories AS PCJOIN Products AS P ON PC.CategoryID = P.CategoryIDJOIN Sales AS S ON P.CategoryID = S.CategoryIDGROUP BY PC.CategoryNameORDER BY TotalSales DESC;
Code explanation
The explanation of the solution code is given below:
Lines 2–4: The
SELECTstatement selects the columnsCategoryNameandTotalSales. TheRANK()function assigns a rank to each category based onTotalSalesin descending order. We useASto set an alias for the calculated column.Line 5: The
FROMclause specifies the table name asProductCategories.Line 6: The
JOINis applied to theProductstable on theCategoryIDcolumns in theProductCategoriesandProductstables.Line 7: The
JOINis applied withSalesonCategoryIDcolumns in theProductsandSalestables.Line 8: The
GROUP BYclause groups the results byCategoryName.Line 9: The
ORDER BYclause sorts the results by theTotalSalescolumn in descending order.
Recalling relevant concepts
We have covered the following concepts in this question:
Selective columns ...