++++++++++++++++++++++++++++++
+ id + title + num +
++++++++++++++++++++++++++++++
+ 1 + name slim + 5 +
+ 2 + name frog + 6 +
+ 3 + name frog + 2 +
+ 4 + nick one + 8 +
+ 5 + nick two + 3 +
+ 6 + nick strong man + 7 +
++++++++++++++++++++++++++++++
Хочу командой GROUP BY сделать группировку, по полю title, но по значению ДО первого пробела
SELECT *
FROM `my_table`
WHERE 1
GROUP BY команда_которую_не_знаю(`title`)
ORDER BY `num` ASC
На выходе охота получить что то типа
++++++++++++++++++++
+ id + title + num +
++++++++++++++++++++
+ 3 + name + 2 +
+ 5 + nick + 3 +
++++++++++++++++++++
Такое возможно? Если да, подскажите как написать запрос
p.s. в данный момент делаю запрос ко всей таблице, и уже после запроса обрабатываю данные
благодаря мудрым советам @Akina - можно сделать запрос
SELECT `id`, SUBSTRING_INDEX(`title`, ' ', 1), `num`
FROM `my_table`
WHERE 1
GROUP BY `title`
ORDER BY `num` ASC
но команда GROUP BY перестает работать
++++++++++++++++++++
+ id + title + num +
++++++++++++++++++++
+ 3 + name + 2 +
+ 1 + name + 5 +
+ 2 + name + 6 +
+ 5 + nick + 3 +
+ 6 + nick + 7 +
+ 4 + nick + 8 +
++++++++++++++++++++
Непонятно, для чего в выходном наборе поле id. И тем более непонятно, что должно выводиться, если одному и тому же (судя по ORDER BY - минимальному) значению num соответствует несколько разных id...
Додумывая задачу, считаю, что наиболее верным будет следующий запрос:
SELECT SUBSTRING_INDEX(`title`, ' ', 1) title, min(`num`) num
FROM `my_table`
-- WHERE 1
GROUP BY SUBSTRING_INDEX(`title`, ' ', 1)
ORDER BY `num` ASC
Если всё же id необходим, то запрос будет таким:
SELECT MIN(t1.id) id, t2.title, t2.num
FROM my_table t1
JOIN (SELECT SUBSTRING_INDEX(`title`, ' ', 1) title, min(`num`) num
FROM `my_table`
GROUP BY SUBSTRING_INDEX(`title`, ' ', 1)) t2
ON SUBSTRING_INDEX(t1.title, ' ', 1) = t2.title
AND t1.num = t2.num
GROUP BY t2.title, t2.num
ORDER BY num
fiddle
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости