Home > database >  SQLite: How to fetch the ORDER index of COUNT
SQLite: How to fetch the ORDER index of COUNT

Time:01-30

I have an SQLite database that contains a list of user messages in a group. And I want to get a user's "rank" by counting the number of messages they had sent.

Currently I'm doing this

SELECT user_id, COUNT(*) as count 
FROM message
group by user_id
ORDER BY count DESC

It'd return something like this:

- user_id count
1 2072040132 61877
2 1609505732 40514
3 1543287045 34735
4 203349203 30570
5 842634673 29651
6 1702633101 29185
7 1978947042 27728
8 1929648593 27025
9 1069841429 17944
10 1437208364 17344
11 ... ...

Like user 1609505732 is top 2, and 1702633101 is top 6.

But my database has more than 2 million rows, and this is too slow having to fetch all of the list. I was wondering if there are any way that I can fetch only the order of it.

Like this:

- user_id order count
1 1702633101 6 61877

And the user with id=1702633101 is top 6. That'd be a lot faster.

Thanks for spending time on my question, I can't seem to find the answer anywhere on the internet.

CodePudding user response:

To improve query speed, I'd consider physicalising the aggregate view, example below:


CREATE Table as tbl_aggregate()
Id INTEGER PRIMARY KEY AUTOINCREMENT
, user_id NVARCHAR
, count INT;



INSERT INTO tbl_aggregate 
SELECT user_id, COUNT(*) as count 
FROM message
group by user_id
ORDER BY count DESC;

Select * from tbl_aggregate
Where Id = 6

Select top 10 * from tbl_aggregate
  •  Tags:  
  • Related