mysql - Returning top 3 count values in sql queries -


i have grouped table based on column field, , simultaneously displayed count value each group. example

user   |    count(user) user 1 |     4 user 2 |     3 user 3 |     3 user 4 |     3 user 5 |     2 

now need display top 3 users count in case user 1, user2, user 3, user 4.

i have written grouping logic when try order values of count desc , restrict result 3(limit 3), user 1,2, , 3. not correct because user 4 comes in top 3 count.

this should it:

select user, count(1) users group user having count(user) >= (select count(1) users group user order count(user) desc limit 2, 1) order count(user)

example table: mysql> select * users; +----+-------+ | id | user  | +----+-------+ |  1 | user1 | |  3 | user3 | |  4 | user4 | |  5 | user5 | |  6 | user1 | |  7 | user2 | |  8 | user2 | |  9 | user2 | | 10 | user2 | | 11 | user1 | | 12 | user5 | | 13 | user5 | | 14 | user6 | | 15 | user6 | | 16 | user6 | +----+-------+ 15 rows in set (0.00 sec)   mysql> select user, count(1) users group user having count(user) >= (select count(1) users group user order count(user) desc limit 2, 1) order count(user) desc; +-------+----------+ | user  | count(1) | +-------+----------+ | user2 |        4 | | user1 |        3 | | user5 |        3 | | user6 |        3 | +-------+----------+ 4 rows in set (0.00 sec) 

so trick figure out 3rd highest count value is. users have count >= (so includes users tied 3rd place).

the subquery limit 2, 1 used 3rd highest count value. use limit 4, 1 if wanted 5 highest instead of 3.


Comments

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -