Как упорядочить набор записей по количеству вхождений значения поля и отсортировать по нему

#php #mysql #database #sorting #group-by

#php #mysql #База данных #сортировка #группировать по

Вопрос:

Я запускаю запрос select * from transactions , который выдает мне наборы записей

 ppno ---------name---------------amnt
1309 ---------Rajasekar----------12000
1210 ---------Mani     ----------21000
1309 ---------Sank     ----------90012
1100 ---------still    ----------12232
1309 ---------Jack     ----------23344
  

Я хочу сгруппировать результирующий набор по количеству вхождений того же самого ppno и отсортировать его на основе количества вхождений. Например, я хочу что-то вроде этого.

 ppno ---------name---------------amnt
1309 ---------Rajasekar----------12000
1309 ---------Sank     ----------90012
1309 ---------Jack     ----------23344
1210 ---------Mani     ----------21000    
1100 ---------still    ----------12232
  

Ответ №1:

 select t.*
from transactions t
order by (
    select count(1) from transactions t2 where t2.ppno = t.ppno
) desc, t.ppno desc
  

Ответ №2:

 SELECT t.ppno, t.name, t.amnt
    FROM (SELECT ppno, COUNT(*) AS ppnoCount
              FROM transactions
              GROUP BY ppno) c
        INNER JOIN transactions t
            ON c.ppno = t.ppno
    ORDER BY c.ppnoCount DESC, t.ppno