Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группировка по меньшему значению 
V
    Опции темы
maxipub
Дата 12.1.2010, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Опять я со своими меньшими значениями в замешательстве smile 
Есть таблица table, поле id уникальное, sub_id неуникальные.
Мне нужно выбрать для каждого из имеющихся sub_id его минимальный id, например, такие данные:

id sub_id
1 1
2 1
3 2
4 2
5 2

результат - строки
1 1
3 2

Запрос, так понимаю, вида:

Код

SELECT * FROM table GROUP BY sub_id


Проблема в том, что GROUP BY работает как-то без внутренней сортировки и спокойно может выдавать верные с его позиции, но некорректные для моей задачи данные, например

2 1
5 2

Можно как-то указать ему, что он должен группировать все sub_id по минимальному соответствующему id?
PM MAIL   Вверх
ТоляМБА
Дата 12.1.2010, 12:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



Код
Select MIN(id), sub_id
From table
GROUP BY sub_id

PM   Вверх
maxipub
Дата 12.1.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



ТоляМБА, не работает, т.к., насколько я понимаю, группировка первична smile 
PM MAIL   Вверх
Kesh
Дата 12.1.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



У меня еще вот такое сработало...
Код

SELECT * FROM table
GROUP BY sub_id
HAVING sub_id = MIN(sub_id);


Добавлено через 3 минуты и 5 секунд
Цитата(maxipub @  12.1.2010,  12:22 Найти цитируемый пост)
ТоляМБА, не работает, т.к., насколько я понимаю, группировка первична

А у меня его код все правильно выбирает...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
maxipub
Дата 12.1.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Kesh @  12.1.2010,  12:37 Найти цитируемый пост)
А у меня его код все правильно выбирает...

на тестовой таблице? конечно... но на конечно у меня он точно так же работает, как и без MIN
это и не удивительно, все равно что запрос c WHERE условием - MIN уже будет отбирать из того, что удовлетворяет условию (а в данном случае - группировке), а не из всей таблицы

ваш вариант тоже что-то не работает, но ближе уже)))

Добавлено через 5 минут и 6 секунд
Кароче смысл в том, что данные в файле таблицы физически находятся неоднородно (старая большая таблица, где постоянно что-то вставляется / удаляется / редактируется). GROUP BY берет первую попавшуюся строку с sub_id, остальные такие - соответственно, игнорит. В том то и проблема.

Добавлено через 14 минут и 2 секунды
В общем, сделал так:

Код

SELECT * FROM (SELECT * FROM `table` ORDER BY id) AS t GROUP BY t.sub_id


Не очень, правда, нравится, пусть и решение чисто техническое, не для масс. Но все равно. У кого будет более рациональный вариант - велкам в тему! ;)
PM MAIL   Вверх
Akina
Дата 12.1.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  12.1.2010,  14:20 Найти цитируемый пост)
данные в файле таблицы физически находятся неоднородно (старая большая таблица, где постоянно что-то вставляется / удаляется / редактируется). GROUP BY берет первую попавшуюся строку с sub_id, остальные такие - соответственно, игнорит. В том то и проблема.

Сказки рассказываете. Запрос ТоляМБА даже теоретически не может дать неверные данные, если кто-то не лазил кривыми руками в исходник сервера БД.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ТоляМБА
Дата 12.1.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



Цитата(maxipub @  12.1.2010,  15:20 Найти цитируемый пост)
GROUP BY берет первую попавшуюся строку с sub_id, остальные такие - соответственно, игнорит
Откуда такая информация?

PM   Вверх
Zloxa
Дата 12.1.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  12.1.2010,  13:20 Найти цитируемый пост)
Не очень, правда

это не "не очень".
Это - в топку.
Таки чем не устроил вариант от ТоляМБА?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(ТоляМБА @  12.1.2010,  14:13 Найти цитируемый пост)
Откуда такая информация?

Чистая логика. Иначе почему запрос с MIN и без него возвращает одни и те же данные (не с минимальным, а с первым встречающимся значением)?

Цитата(Zloxa @  12.1.2010,  14:19 Найти цитируемый пост)
Таки чем не устроил вариант от ТоляМБА?

Он не работает. Вообще, насколько я понимаю, то этот запрос следует трактовать как обычный:

Код

Select id, sub_id
From table
GROUP BY sub_id


С последующим наложением на его результаты функции MIN(). Если бы не было группировки, тогда да, область действия - все данные. По сути, оно и тут так есть - область действия все данные, но, все данные не с таблицы, а ограниченные работой GROUP BY.
PM MAIL   Вверх
Akina
Дата 12.1.2010, 15:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  12.1.2010,  16:11 Найти цитируемый пост)
Чистая логика. Иначе почему запрос с MIN и без него возвращает одни и те же данные (не с минимальным, а с первым встречающимся значением)?

Это называется не "чистая логика", а "чистый мозг". Нефиг где попало вместо перечисления нужных полей звёздочки ляпать.

Цитата(maxipub @  12.1.2010,  16:11 Найти цитируемый пост)
Он не работает. Вообще, насколько я понимаю, то этот запрос следует трактовать как обычный:

Вам следует начать с чтения документации. И предполагать на основе мануала, а не по линиям на потолке.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.1.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  12.1.2010,  15:11 Найти цитируемый пост)
этот запрос следует трактовать как обычный:

НЕТ!!!

Задачу "выбрать для каждого из имеющихся sub_id его минимальный id" решает запрос от ТоляМБА. ЖЫРНАЯ ТОЧКА.

Если запрос от Толи твоей задачи не решает, ты ее не верно сформулировал.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, это лишь мои предположения, я же не утверждаю. По любой мелочи так нервничаете? smile

Просто не понятно, почяему тогда пример ТоляМБА, не работает с моей таблицей? В криворукости причину искать, конечно, можно... но в данном случае - вряд ли выйдет, там чистый дамп БД одной из крупнейших CMS.
PM MAIL   Вверх
Akina
Дата 12.1.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Я думаю, у него таблица другая, полей поболе, и соответственно текст запроса другой. А тут он "доупрощался" до вышенаписанной ахинеи.

Добавлено через 48 секунд
Цитата(maxipub @  12.1.2010,  16:42 Найти цитируемый пост)
Просто не понятно, почяему тогда пример ТоляМБА, не работает с моей таблицей?

Так, РЕАЛЬНУЮ структуру таблицы и НАСТОЯЩИЙ текст запроса - в студию.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 12.1.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, конечно другая. Все описывать как оно есть было бы долго, я затронул лишь суть проблемы. Ок, если говорите что запрос верный, сейчас еще раз буду все с начала разбирать и смотреть.
PM MAIL   Вверх
Akina
Дата 12.1.2010, 16:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  12.1.2010,  16:54 Найти цитируемый пост)
описывать как оно есть было бы долго, я затронул лишь суть проблемы

Тебе надо решить ПРОБЛЕМУ? да? тогда садись и долго описывай. Не помрёшь. Но и помогать тогда тебе будут именно в решении твоей проблемы, а не хрен знает чего.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 12.1.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



В общем ситуация там такая, что эта часть используется в большом запросе. Вот упростил его до того момента, когда начинаются проблемы:

Код

SELECT MIN(t.id), t.sub_id, s.dat FROM `table` AS t INNER JOIN `stats` AS s ON s.id=t.id GROUP BY t.sub_id


В таблице stats соответственно есть поле уникальное id, по которому и ведется джоин. Проблема в том, что выбираемые данные s.dat не соответствуют MIN(t.id), а соответствуют тому самому t.id, который возвращается в результате простого GROUP BY (т.е. без MIN(t.id)). Подозреваю, что тут у меня какие-то косяки с логикой запроса.
PM MAIL   Вверх
Akina
Дата 12.1.2010, 16:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Вот-вот... выбираемое поле, не использованное в агрегатной функции, обязано включаться в Group By.
У тебя нет ни того, ни другого - строгие СУБД на это откликнутся ошибкой, а мускул в силу гипертрофированной user-friendly просто берёт отфонарное значение.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.1.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Код

select 
  id
  ,sub_id
 ,s.dat
from (
  SELECT MIN(t.id) id
              , sub_id
  FROM `table` AS t 
  GROUP BY t.sub_id) t
INNER JOIN `stats` AS s ON s.id=t.id 




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Akina @  12.1.2010,  16:22 Найти цитируемый пост)
выбираемое поле, не использованное в агрегатной функции, обязано включаться в Group By

Хм... smile а можно подробней, что сие означает, как следует поступить?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  12.1.2010,  16:22 Найти цитируемый пост)
гипертрофированной user-friendly 

думаю не юзерфрендлести дело.
Скорее всего была какаято техническая трудность в реализации рестрикшна.

юзерфредли, это когда тебя компилятор убережет от ошибки.
опытный программист с легкостью обойдет этот сурогатный рестрикшн  (минимальное или максимальное значения входия в множество любое значение)
а вот нубу, весьма тяжко понять суть поцесса, потому уберечь его от заведомой ошибки - святое дело.

Это сообщение отредактировал(а) Zloxa - 12.1.2010, 16:31


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, вариант, но я на данном этапе вот так поступил:
Код

SELECT t.id, t.sub_id, s.dat FROM (SELECT * FROM `table` ORDER BY id) AS t INNER JOIN `stats` AS s ON s.id=t.id GROUP BY t.sub_id

мне кажется, проще будет?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  12.1.2010,  16:30 Найти цитируемый пост)
проще

не проще и не правильно.

Добавлено через 1 минуту и 27 секунд
Цитата(maxipub @  12.1.2010,  16:30 Найти цитируемый пост)
мне кажется

мне кажется что тебе еще слишком многому надо учитсья прежде чем пускаться в рассуждения.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Zloxa @  12.1.2010,  16:26 Найти цитируемый пост)
думаю не юзерфрендлести дело.

А вот я как раз тоже придерживаюсь противоположного мнения.
Начинал еще в детстве, с Z80, бэйскиов да паскалей, поэтому с теми же типами переменных, их сравнениями и т.д. в вольном пхп путаницы не создаю.
А вот с СУБД не сталкивался.

Вы теперь мне предлагаете изучать классические строгие СУБД для того чтобы потом нормально работать с MySQL?
Это ли не то же самое, что учиться кататься на скейте, чтоб потом хорошо на велосипеде ездить, не находите?

Добавлено @ 16:34
Цитата(Zloxa @  12.1.2010,  16:32 Найти цитируемый пост)
не проще и не правильно

Почему не правильно? Работает корректно.

Это сообщение отредактировал(а) maxipub - 12.1.2010, 16:36
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



maxipub, тебе действительно еще многому надо учиться, прежде ты поймешь что ошибка - не враг твой а друг твой. А тем более ошибка на этапе компиляции вместо заведомо недетерменированного набра в результате, который сегодня формируется вроде правильно, а заврта, внезапно, стал чудить.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, так, а в чем там ошибка? smile 
PM MAIL   Вверх
Akina
Дата 12.1.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  12.1.2010,  17:34 Найти цитируемый пост)
Почему не правильно? Работает корректно.

ПОКА работает корректно... но полагать. что так будет всегда - крайне неразумно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 12.1.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, так можете объяснить, что не так с самом верхнем запросом на странице? Почему он не работает? И как надо его изменить - как вариант от Zloxa?

Цитата(Akina @  12.1.2010,  16:46 Найти цитируемый пост)
ПОКА работает корректно... но полагать. что так будет всегда - крайне неразумно.

А почему так? Мы же применяем необходимую сортировку, после группируем, далее джоин идет уже по чистым данным. Можно хоть пример того, что может привести к сбою?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  12.1.2010,  16:43 Найти цитируемый пост)
а в чем там ошибка? 

в ДНК.

Документация запрещает использовать в списке полей select выражения не перечисленные в group by и не являющиеся результатом аггрегатной функции, в случае, если значения этих полей могут быть не однозначны для группы. Маська не несет ответственности за то, что будет возвращать всегда ПЕРВОЕ попавшееся значение. Она обещает вернуть ЛЮБОЕ

тыкать на это место в документации я уже запарился. ИЩИ САМ.

Добавлено @ 16:56
Цитата(maxipub @  12.1.2010,  16:54 Найти цитируемый пост)
Мы же применяем необходимую сортировку

эта сортировка не должна влиять на результат выборки.
то что влияет - недоработка оптимизатора. Я б на его месте эту сортировку оптимизировал и был бы прав.

Это сообщение отредактировал(а) Zloxa - 12.1.2010, 16:57


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, ну, а примерчик хоть какой-то для лучшего понимания можете предоставить?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



maxipub, зачем? 
Лучше ты мне докажи что я не прав.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, занавес! smile 
Ладно, ребята, благодарю за ваши старания. Буду сам дальше кайфовать. smile 
PM MAIL   Вверх
Akina
Дата 12.1.2010, 17:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  12.1.2010,  17:54 Найти цитируемый пост)
так можете объяснить, что не так с самом верхнем запросом на странице? Почему он не работает? 
Что не так - уже не раз объяснили. Отбрось предрассудки и почитай всё-таки доки.

Цитата(maxipub @  12.1.2010,  17:54 Найти цитируемый пост)
как надо его изменить - как вариант от Zloxa?

Код

SELECT * FROM table GROUP BY sub_id

разворачивается в 
Код

SELECT id, sub_id FROM table GROUP BY sub_id

что эквивалентно
Код

SELECT (любой, первый попавшийся) id, (для каждого уникального) sub_id FROM table GROUP BY sub_id

Цитата(maxipub @  12.1.2010,  17:54 Найти цитируемый пост)
Мы же применяем необходимую сортировку, после группируем, далее джоин идет уже по чистым данным. Можно хоть пример того, что может привести к сбою? 

При выполнения группировки сортировка имеет полное право рассыпаться - ибо нет никаких оснований её сохранять.
Пример тут не нужен. Достаточно усвоить, что простое 
Код

select *
from SomeTable

в двух последовательных запусках имеет полное право выдать записи в РАЗНОМ порядке.
Аналогично
Код

select *
from SomeTable
group by SomeField

в двух последовательных запусках имеет полное право выдать записи каждой группы в РАЗНОМ порядке.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.1.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  12.1.2010,  17:41 Найти цитируемый пост)
в двух последовательных запусках имеет полное право выдать записи каждой группы в РАЗНОМ порядке.

smile
Нет, сортировка набора в результате группировки - в маське документирована. 
Более того, придуман нелепый воркэраунд с order by null, дабы избежать оверхеда на сортировку.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 12.1.2010, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  12.1.2010,  18:52 Найти цитируемый пост)
Нет, сортировка набора в результате группировки - в маське документирована. 

При отсутствии Order By? я что-то пропустил, кажется.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.1.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  12.1.2010,  19:14 Найти цитируемый пост)
При отсутствии Order By?

Вот такой вот юзерфрендель smile
Я долго умиляся когда сие выопано было.
Кстати, мне казалось, что ты участвовал в той ветке.
Цитата

* If you use GROUP BY, output rows are sorted according to the GROUP BY columns as if you had an ORDER BY for the same columns. To avoid the overhead of sorting that GROUP BY  produces, add ORDER BY NULL:

SELECT a, COUNT(b) FROM test_table GROUP BY a ORDER BY NULL;

* MySQL extends the GROUP BY clause so that you can also specify ASC and DESC after columns named in the clause:

SELECT a, COUNT(b) FROM test_table GROUP BY a DESC;

тут

Полагаю эта юзерфрендля родилась покуда еще группировка могла выполняться лишь средствами сортировки. Видимо, ее тогда задокументироали, дабы избавить пользователей от оверхедного ордербая буде он им понадобиться. Не знаю, умеет ли щас маська групбай по хэшу делать, да  несколькими потоками,  однако теперь придется тащить функционал сортировки по груп баю для быквард компатибилити.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 12.1.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Понятно... это я - думал одно, а сказал совсем другое... должно было быть не "в двух последовательных запусках имеет полное право выдать записи каждой группы в РАЗНОМ порядке", а "в двух последовательных запусках имеет полное право обрабатывать записи каждой группы в РАЗНОМ порядке".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.