Предположим, я хочу показать список пользователей, заказывающих наибольшее количество сообщений, которые они отправили.
У меня есть 2 таблицы: Users
и Messages
У меня 10 пользователей
Пользователь отправил 20 сообщений (есть 20 строк в таблице «Сообщения»)
SELECT * FROM messages WHERE user='A' User B sent 17 msgs User C sent 19 User D sent 13
и так далее.
Я хочу, чтобы запрос, который будет перечислять Пользователей в порядке их общего количества отправленных сообщений. Подобно:
1. A (20 msgs) 2. C (19 msgs) 3. B (17 msgs) 4. D (13 msgs)
Я старался, но я не могу найти какой-либо запрос для его выполнения. Пожалуйста помоги. Заранее спасибо.
SELECT user, COUNT(*) FROM messages GROUP BY user ORDER BY count(*) DESC;
если вы хотите напечатать имена, присоединитесь к таблице пользователей,
select user_name, count(*) from users inner join messages m on users.userid=m.messageid group by userid order by count(*) desc;
Вы можете сортировать с помощью alias
:
SELECT user, COUNT(1) as cnt FROM Messages GROUP BY user ORDER BY cnt DESC;
или position
:
SELECT user, COUNT(1) as cnt FROM Messages GROUP BY user ORDER BY 2 DESC;