Допустим есть таблица, в которой есть поле Name с неуникальными значениями. Собственно вопрос такой, обязательно ли запрос Код (Text): SELECT Table.* FROM Table GROUP BY Table.Name будет возвращать первые записи из групп , сформированных по Name, т.е. при использовании GROUP BY возвращается ОБЯЗАТЕЛЬНО первая строка группы или теоретически может вернуться другая ?
это определяется сортировкой по умолчанию. она будет по первичному ключу раз вы не задали другого в условии
Если Вы имеете ввиду использование ORDER BY , то как раз на набор строк попавших в результат это влиять не будет. GROUP BY формирует группы на первых этапах формрования набора...
косяк в том, что MySQL допускает вольности в списке полей при группировке. другие диалекты SQL четко ограничивают этот набор как: - поля, которые перечислены во фразе GROUP BY, - другие поля могут упоминаться только как аргументы агрегатных функций (sum, count, ...) непонятно что должен выдать "*" при группировке. поэтому просто не используйте такую фигню. придерживайтесь стандартов и все будет четко. поясню: такой запрос понятен SELECT category, count(*), sum(amount) FROM items GROUP BY category для каждой категории выведем ее название, количество элементов в ней и просуммируем поле amount внутри каждой категории такой запрос непонятен ни программисту, ни походу серверу БД SELECT category, id, amount FROM items GROUP BY category какой id выведется? их же в каждой категории несколько. может первый? а amount из той же записи или тоже "первый" по какому то ключу, тогда по какому именно? ПОЛНАЯ ХУЙНЯ. просто не морочьте себе голову — это не тру сиквел.
id и amount будут из одной записи, как раз вопрос "из какой" ? - для примера, допустим есть несколько записей в таблице(Category - par1 - par2): cat1 - 2 - 5 ; cat2 - 3 - 6 ; cat3 - 3 - 8 ; cat2 - 4 - 3 ; (допустим такой порядок следования записей, выдаст SELECT без сортировки) тогда запрос Код (Text): SELECT * FROM Table GROUP BY Category вернет следующий набор строк: cat1 - 2 - 5 ; cat2 - 3 - 6 ; - первая строка из сформированной группы (cat2 - 3 - 6 ; cat2 - 4 - 3 cat3 - 3 - 8 ; если бы порядок следования cat1 - 2 - 5 ; cat2 - 4 - 3 ; cat3 - 3 - 8 ; cat2 - 3 - 6 ; то запрос с GROUP BY вернул бы cat1 - 2 - 5 ; cat2 - 4 - 3 ; - первая строка из сформированной группы (cat2 - 4 - 3 ; cat2 - 3 - 6 cat3 - 3 - 8 ; Вот у меня вопрос и связан с этим - Возврат первой строки из группы (и формрование группы в порядке следования записей в таблице) это стандартизованное поведение или "так сложилось"? Просто ответ на этот вопрос, может помочь упростить некоторые типы запросов.
ну ты прям Копитан Очевидность. это и ежику понятно. я про то что в текущем твоем запросе нет указания на сортировку , вот и получишь хрен знает что. для начала определись ЧТО ИМЕННО надо выбрать из таблицы, какие поля и в каком порядке. и уже исходя из этого строй запрос. а не наоборот. написать корявый запрос, а потом пытаться заставить его работать как надо.. забудь свой запрос. и напиши нам - ЧТО ТЫ ХОЧЕШЬ вытащить из таблицы конкретно. тогда поможем тебе
Ну я ее здесь не указываю, потомучто это не имеет смысла, любой запроса вида: Код (Text): SELECT * FROM Table ORDER BY par1 , par2 [ или ORDER BY par2 , par1 , или ORDER BY par1 ,или ORDER BY par2] GROUP BY Category вернет один и тот же набор строк, в одной и той же последовательности (или мне кажется что ты имел ввиду под "указания на сортировку" использование ORDER BY ??) Я знаю какие данные нужно вытащить и по какому критерию, и соответствующий запрос тоже могу составить. Но зная ответ на поставленный вопрос запросы можно упростить