MySQL: очередной вопрос про сортировку по двум полям
Имеется таблица:
| id | name |
+----+------+
| 1 | john |
| 2 | alex |
| 4 | ivan |
| 5 | ivan |
| 6 | alex |
| 8 | john |
Нужно отсортировать по id, но так, чтобы имена были не перемешаны, а сгруппированы:
| id | name |
+----+------+
| 1 | john |
| 8 | john |
| 2 | alex |
| 6 | alex |
| 4 | ivan |
| 5 | ivan |
То есть если у наименьшего id = 1 имя john, то все остальные записи с именем john должны идти следом отсортированные по id. Как это можно сделать?
UPDATE: MySQL 5.1
Ответы (2 шт):
Автор решения: Akina
→ Ссылка
WITH
cte AS (
SELECT id, name, MIN(id) OVER (PARTITION BY name) min_id
FROM source_table
)
SELECT id, name
FROM cte
ORDER BY min_id, id
Автор решения: splash58
→ Ссылка
Для таких диких, как я - по старинке
select t.id, t.name
from t
join
(select min(id) orderid, name from t group by name) as o
on t.name = o.name
order by orderid, t.id