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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 20:24   #1
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию агрегатные функции

SELECT postav, tovar, MAX(kol) FROM postavki GROUP BY tovar, postav;

пишу такой запрос. нужно чтобы сгруппировались записи по названию товара, и показались только с максимальным количеством. но происходит только группировка. подскажите пожалуйста, как исправить?
Sv. вне форума Ответить с цитированием
Старый 11.12.2013, 20:32   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

как понять "только с максимальным количеством"?
eval вне форума Ответить с цитированием
Старый 11.12.2013, 20:33   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
нужно чтобы сгруппировались записи по названию товара
Цитата:
но происходит только группировка
Ну и произошло то, что нужно. Из ваших же слов. Или не верь глазам своим?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.12.2013, 20:43   #4
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию

еще есть количество товара на складе
к примеру
KitKat шоколад 30
Milka шоколад 40
Аленка шоколад 100

нужно, чтобы из этой группы показалась только Аленка, т.к. ее количество максимально
Sv. вне форума Ответить с цитированием
Старый 11.12.2013, 22:11   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

если KitKat, Milka и Аленка - это поле postav, а "шоколад" - это поле tovar, то я бы попробовал такой запрос:
Код:
SELECT AA.postav, AA.tovar, AA.kol FROM postavki AA, 
     (SELECT tovar, MAX(kol) as MaxKol FROM postavki GROUP BY tovar) MaxTovar 
  where  MaxTovar.tovar =  AA.tovar and MaxTovar.MaxKol = AA.kol;

1) не проверял.

2) возможно, что не любая СУБД скушает такой запрос

3) самое неприятное. если несколько поставщиков имеют товар с максимальным значением, то выберутся ВСЕ:
пусть есть записи:
АльпенГолд шоколад 100
KitKat шоколад 30
Milka шоколад 40
Аленка шоколад 100
Путешествие шоколад 100

выберётся:
АльпенГолд шоколад 100
Аленка шоколад 100
Путешествие шоколад 100
т.к. они все имеют максимальное значение
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Агрегатные функции + вложенные запросы = Ошибка=( Anna312 SQL, базы данных 18 14.11.2013 15:17
Табулирование заданной функции и определение максимального и минимального значения функции в таблице Марина1986 C/C++ Сетевое программирование 0 07.05.2013 11:31
DBChart и агрегатные функции Drugnir БД в Delphi 6 19.06.2012 22:32
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
Агрегатные функции в Query nataly_ukr БД в Delphi 3 04.09.2007 18:15