Reputation: 21
I have a table with three columns (City, Orderid, Total_quantity) and more than 500 rows. I want to fetch the top 50 records according to total_quantity wise. I can do this with rank_number but the twist can be understood with an example.
Example: Select top 5 (only for example) considering there are only 3 cities.
Table1
City Orderid Total_quantity
---------------------------
A 1 90
A 2 80
A 3 70
B 4 70
B 5 65
B 6 55
C 7 79
C 8 24
'
'
'
If I select the top 5 then the first record should be from city A with max total Quantity, the second record should be from city B with max total quantity, the third record should be from city C with max quantity. Here is the twist, the fourth record should be from city A with max quantity and then the final fifth record should be from city B with max total quantity. So the output will be like
Output:
Table1
City Orderid Total_quantity
---------------------------
A 1 90
B 4 70
C 7 79
A 2 80
B 5 65
'
'
'
Upvotes: 2
Views: 4577
Reputation: 501
select City, Orderid, total_quantity,
rank() OVER (PARTITION BY City ORDER BY total_quantity desc) as rank_quantity
from table
order by rank_quantity,city LIMIT 5;
Let me know if it works
Upvotes: 4