I’m creating a query where I need to get the ranking depending on how many are duplicated in the column “MacAddress”(amount) in the table MacsUsers, this is the data:
this is my SQL query:
SELECT COUNT([MU].MacAddress) AS Quantity, [USER].Name, [USER].SurName, [MU].MacAddress, DENSE_RANK() OVER(ORDER BY mu.MacAddress) AS RNK FROM MacsUsers [MU] JOIN Macs [MAC] ON [MAC].MacAddress = [MU].MacAddress JOIN Users [USER] ON [MAC].UserEmail = [USER].Email JOIN Profiles [PROFILE] ON [PROFILE].MacAddress = [MAC].MacAddress GROUP BY mu.MacAddress,[USER].Name, [USER].SurName
I think I’m doing well with the DENSE_RANK function but it does not work as it is expected, any possible solution? thanks advance
Advertisement
Answer
Your DENSE_RANK
window function should apply ordering on the “Quantity” field instead of the “MacAddress” field. In order to apply a window function on an aggregated field, you need to have a subquery as follows.
WITH cte AS ( SELECT COUNT([MU].MacAddress) AS Quantity, [USER].Name, [USER].SurName, [MU].MacAddress FROM MacsUsers [MU] JOIN Macs [MAC] ON [MAC].MacAddress = [MU].MacAddress JOIN Users [USER] ON [MAC].UserEmail = [USER].Email JOIN Profiles [PROFILE] ON [PROFILE].MacAddress = [MAC].MacAddress GROUP BY mu.MacAddress, [USER].Name, [USER].SurName ) SELECT *, DENSE_RANK() OVER(ORDER BY Quantity) AS RNK FROM cte