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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> select и group by чет я не понимаю 
:(
    Опции темы
DooZ
Дата 26.5.2010, 00:29 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте,

что-то не пойму, есть запрос

SELECT id, id_subcategory FROM images WHERE id_category='1' GROUP BY id_subcategory ORDER BY id DESC

должен возвращать значения с большего ИД (order by)

в целом выборка работает, но ID не сортируются
выдается первый ИД что найдет (наименьший)

подскажите где ошибка? как запрос изменить?

заранее спасибо
PM MAIL   Вверх
Данкинг
Дата 26.5.2010, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Не работал с мускулом, но всё равно спрошу: зачем  GROUP BY? Если его убрать?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
eXcile
Дата 26.5.2010, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



попробуйте так
Код

SELECT DISTINCT id_subcategory, id  FROM images WHERE id_category='1'  ORDER BY id DESC


Это сообщение отредактировал(а) eXcile - 26.5.2010, 13:18
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Zloxa
Дата 26.5.2010, 09:08 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(DooZ @  26.5.2010,  00:29 Найти цитируемый пост)
возвращать значения с большего ИД

Код

SELECT MAX(id) id , id_subcategory FROM images WHERE id_category='1' GROUP BY id_subcategory order by id desc


если не использовать аггрегат для поля, не укзаанного в груп бай - будет возвращаться ЛЮБОЕ значение, вне зависимости от порядка сортировки. это ДОКУМЕНТИРОВАНО.

Это сообщение отредактировал(а) Zloxa - 27.5.2010, 07:24


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


Бывалый
*


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

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



max() возвращает наибольшее значение из выборки

Цитата(DooZ @  26.5.2010,  00:29 Найти цитируемый пост)
должен возвращать значения с большего ИД (order by)


а требуется я так понимаю массив всех значений, начиная с наибольшего.

Distinct отфильтрует дубликаты поля id_subcategory и используя order by отсортирует значения id
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Zloxa
Дата 26.5.2010, 12:08 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



eXcile, на сколько я могу судить по документации, приведенный тобой запрос синтаксически не верен. По кр. мере я нигде не нашел, что select_expr может содержать ключевое слово disticnt и это будет значить то, что ты описал. Если ты мне укажешь соответствующее место в документации, буду тебе крайне признателен. А до тех пор все сказанное тобой я воспринимаю не иначе как пафосный чес ламо. 

Что же касается отсутствия сортировки.. я скорее поверю что ТС не правильно сформулировал свои ожидания, нежели что MySQL действительно забыл отсортировать выборку. Скорее всего ТС сортировал именно для того, чтобы получить последний по рангу id внутри категории, т.е. максимальный.

Это сообщение отредактировал(а) Zloxa - 26.5.2010, 12:15


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


Бывалый
*


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

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



Zloxa, да в коде была ошибка, подредактировал. 

ЗЫ: свои восприятия в отношении другой личности, оставьте при себе

--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Zloxa
Дата 26.5.2010, 13:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(eXcile @  26.5.2010,  13:27 Найти цитируемый пост)
да в коде была ошибка, подредактировал

а теперь внимательно подумай что вернет тебе твой запрос.... особенно если id - pk

Цитата(eXcile @  26.5.2010,  13:27 Найти цитируемый пост)
оставьте при себе

если я оставлю при себе, как же другим ламо узнать что ты вводишь публику в заблуждение? Уж больно уверенным тоном ты туфту вещаешь.

Это сообщение отредактировал(а) Zloxa - 26.5.2010, 14:25


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


Бывалый
*


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

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



Цитата(Zloxa @  26.5.2010,  13:32 Найти цитируемый пост)
а теперь внимательно подумай что вернет тебе твой запрос.... особенно если id - pk


в таком случае надобность группировки по id вообще отпадает, так как в этом поле и так будут уникальные значения. но то что id= primary key не было сказано.
учитывая такие условия можно использовать

Код

SELECT DISTINCT id_subcategory FROM images WHERE id_category='1'  ORDER BY id DESC


в выборке будет, отсортированные поля id(pk) начиная с наибольшего, с учетом id_category='1' и соответственно отфильтрованные дубликаты для id_subcategory
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Zloxa
Дата 27.5.2010, 06:55 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(eXcile @  27.5.2010,  06:10 Найти цитируемый пост)
в таком случае надобность группировки по id вообще отпадает

Где ты видишь группировку по ID?
Цитата(eXcile @  27.5.2010,  06:10 Найти цитируемый пост)
в выборке будет

садись, два.
Этот запрос вернет уникальные значения id_subcategory  для  id_category='1' и только.
Сортировка? Ты пробовал этот запрос? Не знаю на счет маськи, а оракл и ms sql руганутся на такой ордербай.

eXcile, если ты не в теме, лучше спрашивай, а не учи


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


Бывалый
*


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

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



Цитата(Zloxa @  27.5.2010,  06:55 Найти цитируемый пост)
садись, два.
Этот запрос вернет уникальные значения id_subcategory  для  id_category='1' и только.


а возврат уникальных значений  не есть выборка этого селекта?

http://sql.itsoft.ru/select/

Цитата

С помощью SELECT можно, например, выбирать определенные строки из одной таблицы данных ... 


всегда считал это выборкой,

Цитата(Zloxa @  27.5.2010,  06:55 Найти цитируемый пост)
Сортировка? Ты пробовал этот запрос?


естественно, пробовал запустить как на мускул так и на оракл

--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Zloxa
Дата 27.5.2010, 08:59 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(eXcile @  27.5.2010,  07:44 Найти цитируемый пост)
 естественно, пробовал запустить как на мускул так и на оракл

балабол
Код

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters and Data Mining options

SQL> with t as (select 1 id_subcategory ,1 id ,'1' id_category from dual
  2             union all select 2 id_subcategory ,2 id ,'1' id_category from dual)
  3  select distinct id_subcategory
  4    from t
  5   where id_category = '1'
  6   order by id desc
  7  ;
 order by id desc
          *
ERROR at line 6:
ORA-01791: not a SELECTed expression

MS:
Код

/*------------------------
SELECT DISTINCT id_subcategory FROM (select 1 id_subcategory, 1 id, '1' id_category 
                                     union all select 2 id_subcategory, 2 id, '1' id_category 
                                    ) s WHERE id_category='1'  ORDER BY id DESC
------------------------*/
Msg 145, Level 15, State 1, Line 1
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.


Цитата(eXcile @  27.5.2010,  07:44 Найти цитируемый пост)
а возврат уникальных значений  не есть выборка этого селекта?

Возврат уникальных значений это не тот результат, который ожидает ТС.
Цитата(eXcile @  27.5.2010,  07:44 Найти цитируемый пост)
всегда считал это выборкой,

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


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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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