как применить две сортировки
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
Из
| last | first | name |
|---|---|---|
| 1 | - | a |
| 2 | - | b |
| 3 | - | a |
| 1 | - | b |
| 3 | - | b |
| a | - | b |