Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2013, 16:27   #1
Даниил_глазко
Форумчанин
 
Аватар для Даниил_глазко
 
Регистрация: 25.10.2010
Сообщений: 155
Восклицание Составление запроса MySql

Всем привет. Появилась задача выборки уникальных значений по полю для интернет-магазина. Вот таблица:
Код:
CREATE TABLE IF NOT EXISTS `catalog` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `proizvoditel` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
И данные:
Код:
INSERT INTO `catalog` (`id`, `title`,`proizvoditel`) VALUES
(1, 'Ноутбук ASUS X001','ASUS'),
(2, 'Ноутбук ASUS X000','ASUS'),
(3, 'Ноутбук HP X099','HP'),
(4, 'Ноутбук Samsung X000', 'Samsung');
(5, 'Ноутбук Samsung X002', 'Samsung');
Нужно выбрать:
ASUS
HP
Samsung

Заранее спасибо
Даниил_глазко вне форума Ответить с цитированием
Старый 23.07.2013, 16:53   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

как то так
Код:
SELECT proizvoditel FROM catalog GROUP BY proizvoditel ORDER BY proizvoditel DESC
ADSoft вне форума Ответить с цитированием
Старый 23.07.2013, 16:57   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно и без GROUP BY используя DISTINCT
Код:
SELECT DISTINCT proizvoditel FROM catalog ORDER BY proizvoditel
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.07.2013, 20:58   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Можно и без GROUP BY используя DISTINCT
Код:
SELECT DISTINCT proizvoditel FROM catalog ORDER BY proizvoditel
Коллега, меня всегда мучил вопрос, пользуясь случаем, я позволю себе его задать Вам:
а с точки зрения производительности (потребления ресурсов) будет разница в данном случае (лучше использовать group by или distinct или нет разницы)?!
(другими словами, план запроса будет одинаков?)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.07.2013, 22:14   #5
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

В большинстве диалектов GROUP BY без агрегатных функций недопустим, а агрегатные функции зачастую не самые лёгкие по производительности. Я бы прежде попробовал и сравнил
ReportCube вне форума Ответить с цитированием
Старый 23.07.2013, 22:40   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

DISTINCT использует не явный GROUP BY. Индекс используется, если он существует вообще. В данном случае использовался бы индекс по proizvoditel. Явный GROUP BY то же бы его использовал. Но если туда засунуть еще WHERE по другому полю (полям), то для оптимальной работы в обоих случаях потребовался бы составной индекс с учетом полей во WHERE и в первую очередь по ним. Теоретически в данном случае производительность DISTINCT и GROUP BY должна быть примерно одинакова, если и будут отличия, то не большие
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 23.07.2013 в 22:44.
Аватар вне форума Ответить с цитированием
Старый 23.07.2013, 23:22   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ReportCube, по моему, Вы ошибаетесь. По крайней мере, я с такими диалектами не сталкивался! Дадите пример?


Аватар, спасибо. Я примерно (очень примерно) это так себе и представлял. Спасибо, что подтвердили...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.07.2013, 00:06   #8
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Признаю, не прав, group by допустим без агрегатных функций!
ReportCube вне форума Ответить с цитированием
Старый 25.07.2013, 20:53   #9
Даниил_глазко
Форумчанин
 
Аватар для Даниил_глазко
 
Регистрация: 25.10.2010
Сообщений: 155
По умолчанию

Спасибо! Я давно не был на форуме. Где тут кнопка "Мне нравится"
Даниил_глазко вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составление MySQL запроса с сложной сортировкой пАк777 SQL, базы данных 2 27.01.2013 19:35
Составление сложного запроса. Lazio SQL, базы данных 1 16.12.2011 18:48
Составление запроса Айдар Работа с сетью в Delphi 0 21.10.2010 19:42
Составление SQL запроса для MySQL Яр|/||< (^_^) SQL, базы данных 4 10.06.2010 13:28
составление последовательного запроса Lord777 SQL, базы данных 2 23.05.2010 11:48