Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];




Вниз

Сумма чисел по полю 


andey   (2001-12-11 21:04) [0]

Вопрос может глупый, но я не знаю как подсчитать сумму чисел по определенному полю.



TSV   (2001-12-11 21:26) [1]


select sum(field1) from table1

Полный синтаксис такой: SUM([ALL | DISTINCT] expression)

Удачи. Почитай книгу по SQL.



Dick   (2001-12-12 00:03) [2]

Вопрос действительно смешной. Почитай про SQL и аггрегатные функции.



Dick   (2001-12-12 00:04) [3]

А еще про group by.



Vaddya   (2001-12-12 23:20) [4]

Ну а если поля два, то как? Например Name - товар, Price - его цена. Как вывести весь товар и его цену, а внизу в дополнительной записи еще и полную стоимость , т. е. SUM(Price). Я делал "SELECT Name, SUM(Price) FROM Table1 GROUP BY Name", но так выводится то же самое, что и при "SELECT * FROM Table1", только название поля в DBGrid SUM OF Price. Ну так все таки как?



Girl   (2001-12-13 03:59) [5]

если выводится то же самое, что и при "SELECT * FROM Table1", значит, у тебя строчки Name все разные. Соответственно и суммировать то тебе нечего. Если будет хотя бы две строки с одинаковым Name, то тогда в том самом поле SUM OF Price будет сумма.



Nest   (2001-12-13 10:32) [6]

Делай так!
SELECT name,price FROM pricelist
UNION
SELECT NULL,SUM(price) FROM pricelist


Напиши, помогло ли.



TonnyS   (2001-12-13 12:15) [7]

когда надо таблицу, а внизу - итог то 2 варианта:
1. а)Сначала запрос, выдающий таблицу всех товаров с ценами типа
Select * from ... where <условие1>
б) потом в другом Query запрос типа
Select sum(price) AS sum_price from ... where <условие1>
(то же условие, что и в п. а)
после query2.open что-то типа:
label1.caption := query2.fieldbyname("sum_price").AsString;2. пункт а - такой же,
б) var
summa : double;
i1 : integer;
...
Summa := 0;
query1.DisableControls; //чтоб не отображался пробег по DBGrid
query1.First;
i1 := query1.fieldByName("price").index;
while not query1.eof do begin
summa := summa + query1.fields[i1].AsFloat;
query1.next;
end;
query1.First; //возвращаемся вверх
query1.EnableControls;
label1.caption := floattostr(summa);

вроде всё.



ilysha   (2001-12-13 17:36) [8]

А можно воспользоваться набором EhLib, там такая функция реализована в самом DBGrid.
Пиши, скину линк
http://gratis97.chat.ru



Vaddya   (2001-12-13 20:04) [9]

Nest: в принципе, я тоже думал, что нужно использовать UNION, но по примеру приведенного запроса не вышло, пишет "Invalid use of keyword. Token: NULL". Так что пиши еще, если есть какие идеи.
TonnyS: насчет А - преподаватель сказала, что реально сделать и с одним TQuery. Насчет Б - нужен реляционный способ доступа, а это, как известно, навигационный. Хотя, спасибо за помощь.
Так что прошу содействия.



andey   (2001-12-13 22:00) [10]

Спасибо у меня получилось по способу №1 TonnyS !!!




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.013 c
14-52643          Андрей Сенченко       2001-11-19 17:13  2002.01.17  
Зачем нужны DLL ?


3-52503           Вит                   2001-12-15 16:35  2002.01.17  
Как разбить БД в InterBase на два файла?


14-52664          Ray_Parker            2001-11-13 13:44  2002.01.17  
Вопрос по медиа программированию


14-52641          VEG                   2001-11-19 18:37  2002.01.17  
Как загрузить форму из отдельного *.dfm файла???


3-52488           andey                 2001-12-14 21:26  2002.01.17  
Сколько запрашивать