I spend hours trying to solve this, but I can't.
Well, I simply have a table call invoices
I have data like this
I want to know each customer rank by their total sum
How can I archive this?
You can use a variable for this purpose.
select customer_id, total, rank from ( select customer_id, total, @rank := @rank + 1 as rank from ( select customer_id, sum(total) total from invoices group by customer_id order by sum(total) desc ) t1, (select @rank := 0) t2 ) t3 where customer_id = 1;
customer_id | total | rank ----------: | ----: | ---: 1 | 14080 | 2
dbfiddle here
MySQL rank
. This one includes a number of possible options, depending on how you want to handle customers whose sums come out to be the same. I'm voting to close this question as a duplicate of the one to which I've linked.