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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2014, 20:25   #1
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию максимум по сумме

как найти максимальное значение по сумме, которая вычисляется в процессе выполнения программы?

таблица 1 - n, name
таблица 2 - n, n1, quantity

Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('SELECT db11.N, db11.Name, SUM (db22.Quantity) as SumQ FROM db11 LEFT JOIN db22 ON db22.N=db11.N GROUP BY db11.N, db11.Name');
Query3.Open;

код выше вычисляет суммарное количество каждого товара. Все нормально.
мне нужно, чтобы нашелся товар, у которого количество самое большое. тут я не знаю, пробовал MAX (SUM (db22.Quantity)), но выскакивает ошибка capability not supported, типа так делфи не умеет.
Sanchezzz825 вне форума Ответить с цитированием
Старый 05.05.2014, 23:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так?

Код:
select max(SumQ) as MaxSumQ from 
(SELECT db11.N, db11.Name, SUM (db22.Quantity) as SumQ 
   FROM db11 LEFT JOIN db22 ON db22.N=db11.N GROUP BY db11.N, db11.Name)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2014, 00:09   #3
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а так?

Код:
select max(SumQ) as MaxSumQ from 
(SELECT db11.N, db11.Name, SUM (db22.Quantity) as SumQ 
   FROM db11 LEFT JOIN db22 ON db22.N=db11.N GROUP BY db11.N, db11.Name)
так ругается на SELECT.

и кстати, почему-то делфи не дает поставить скобку в конце
Код:
Query3.SQL.Add('SELECT MAX (SumQ) as MaxSumQ FROM (SELECT db11.N, db11.Name, SUM (db22.Quantity) as SumQ FROM db11 LEFT JOIN db22 ON db22.N=db11.N GROUP BY db11.N, db11.Name'));
или она там не нужна, или я как-то не так поставил?
Sanchezzz825 вне форума Ответить с цитированием
Старый 06.05.2014, 00:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не там!

Код:
Query3.SQL.Add('SELECT MAX (SumQ) as MaxSumQ FROM (SELECT db11.N, db11.Name, SUM (db22.Quantity) as SumQ FROM db11 LEFT JOIN db22 ON db22.N=db11.N GROUP BY db11.N, db11.Name) ');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2014, 00:36   #5
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

со скобкой теперь все хорошо.
но на SELECT все равно ругается

invalid use of keyword
token: SELECT
Sanchezzz825 вне форума Ответить с цитированием
Старый 06.05.2014, 08:35   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sanchezzz825 Посмотреть сообщение
но на SELECT все равно ругается

invalid use of keyword
token: SELECT
СУБД у Вас какая ?

Дело в том, что запросы SQL выполняет не Delphi, а СУБД.
Вот, судя по всему, она вложенные подзапросы не поддерживает.
Поэтому, нужно переписывать запрос по другому.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2014, 12:03   #7
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

СУБД - Paradox
Sanchezzz825 вне форума Ответить с цитированием
Старый 06.05.2014, 12:30   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Paradox по-моему не ест вложенные запросы во FROM. Но может FROM "d:\MyZapros.sql", где в d:\MyZapros.sql текст запроса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.05.2014, 12:58   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар, угу. точно так.


Ещё можно попробовать так написать:
Код:
SELECT TOP 1 db11.N, db11.Name, SUM (db22.Quantity) as SumQ 
   FROM db11 LEFT JOIN db22 ON db22.N=db11.N 
   GROUP BY db11.N, db11.Name
   ORDER BY SumQ Desc
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2014, 13:07   #10
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

всё работает.
спасибо.
Sanchezzz825 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести на экран все двухзначные числа которые равны сумме своих цифр и сумме в квадрате/Turbo Pascal Pavel2502 Помощь студентам 5 26.02.2014 22:18
Задача по бесконечной сумме romich_lestat Помощь студентам 2 31.10.2011 23:01
Вопрос о контрольной сумме Haladdin Общие вопросы Delphi 6 12.01.2011 19:50
Прибавить отрицательный процент к сумме. ms.green Microsoft Office Excel 5 11.06.2010 00:07