как применить две сортировки

mysql

last first name
1     -    a
2     -    b
3     -    a
1     -    b
3     -    b
a     -    b

как отсортировать по столбцу name и last, но name в первую очередь

при таком запросе ошибка

SELECT *, count(name) as c FROM tabl order by c, last, name

#1140 - In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'tab.tabl.ID'; this is incompatible with sql_mode=only_full_group_by

результат

last, first, name, count
1      -      a        2
3      -      a        2
1      -      b        4
2      -      b        4
3      -      b        4
a      -      b        4

Ответы (1 шт):

Автор решения: ValNik

Похоже, вы хотите получить что-то такое

SELECT *
  , count(*)over(partition by name) as c 
FROM tabl 
order by c, last, name

Нужно применить оконную функцию count(*)over(...), когда не нужна группировка.
MySQL позволяет применить значение новой колонки из SELECT в ORDER BY.

last first name c
1 - a 2
3 - a 2
1 - b 4
2 - b 4
3 - b 4
a - b 4

Для MySQL 5.5 применить так

SELECT *
  ,(select count(*) from tabl t2 where t2.name=t.name) as c 
FROM tabl t
order by c, last, name

fiddle

Из

last first name
1 - a
2 - b
3 - a
1 - b
3 - b
a - b
→ Ссылка