Обчислення в таблицях VFP Microsoft Visual FoxPro - 261 питання

Обчислення виконуються командами AVERAGE, CALCULATE, COUNT та SUM. Для всіх перерахованих команд справедливо наступне:

1. Результати відображаються на екрані, якщо SET TALK встановлено на ON. Якщо SET HEADINGS встановлений в ON, то виводяться і обчислювані вирази, що розміщуються над результатами.

2. Записи, що мають позначку видалення, обробляються, якщо SET DELETED встановлено в OFF, і не обробляються – інакше.

Команди наводяться за абеткою. Їхні опції та параметри описані в табл. 1.7 та 3.13.

Опції та параметри команд, які виконують обчислення в таблицях

Список числових виразів, які включають поля таблиці. Елементи списку розділяються комами. У разі команди CALCULATE вирази можуть містити будь-яку комбінацію наведених у табл. 3.14 функцій

Список змінних, у яких зберігається результат. Якщо змінна немає, вона буде створена. Елементами списку можуть бути елементи існуючого масиву

TO ARRAYArrayName

Одновимірний масив, до якого заносяться результати. Якщо масив не існує, то він буде створений. Якщо розмір існуючого масиву недостатній для зберігання результатів, то він буде збільшений, якщо надмірний, залишиться без зміни

AVERAGE [eExpressionList] [Scope] [FORlExpression1] [WHILElExpression2] [TOVarList> TO ARRAYArrayName] [NOOPTIMIZE]

обчислює середні арифметичні значення числових виразів чи полів.

До обчислень включаються всі числові поля таблиці, якщо параметрExpressionListопущений.

Зауваження. Результати команд AVERAGE та CALCULATE AVG( ) збігаються.

Приклад 1. Обчислюється середня ціна книг (полеPrice), інформацію про які зберігає таблиця Books. Крім того, для демонстраційних цілей обчислюється квадрат середнього значення коду книг (поле BookId).

set headings on

&& Перевіряємо, чи відкрито таблицю Books

if not Used("Books") then

MessageBox("Потрібно відкрити таблицю Books!")

average Price, BookId**2 to avgPrice, avgBookId

Результат на екрані:

Приклад 2. Обчислюється середня ціна книг, код яких більший за середнє значення коду.

&& Знаходимо середнє значення коду книг

average BookId to avgBookId

average Price for BookId > avgBookId to avgPrice

open database D:\HomeLibrary\HomeLibrary.dbc

&& Вибираємо необхідні для обчислень дані до таблиці BookPrice

&& Для цієї мети потрібно залучити 3 таблиці: Authors, Books та BooksAuthors

від Books, Authors, BooksAuthors;

and Authors.InputDate > деякіDate;

into cursor BookPrice

&& Після виконання SELECT вибрано область, в якій відкрито курсор BookPrice

&& Отримуємо та друкуємо результат

average Price to avgPrice

CALCULATEeExpressionList[Scope] [FORlExpression1] [WHILElExpression2] [TOVarListTO ARRAYArrayName] [NOOPTIMIZE] [INnWorkAreacTableAlias]

виконує фінансові та статистичні операції з полями таблиць або з виразами, що включають поля, використовуючи як елементиeExpressionListнаведені в табл. 3.14 функції.

Функції, що використовуються вeExpressionListкоманди CALCULATE

Обчислює середнє арифметичне всіх значеньnExpression

Повертає кількість записів, які відповідають умовам,заданимScopeFOR та WHILE

Повертає максимальне значенняeExpression. ТипeExpressionможе бути Character, Date, DateTime, Currency і будь-який числовий

Повертає мінімальне зі всіх значеньeExpression. ТипeExpressionможе бути Character, Date, DateTime, Currency і будь-який числовий

Обчислює величину чистої наведеної вартості інвестиції, використовуючи ставку дисконтуванняnExpression1, а також вартості (nExpression2) майбутніх виплат (негативні значення) та надходжень (позитивні значення). Ставка дисконтуванняnExpression1задається не у відсотках, а у вигляді числа від 0 до 1.nExpression2– задає поле або вираз з ім'ям поля, або числове вираз значення якого інтерпретуються як майбутні виплати чи надходження.nExpression3- необов'язкове початкове вкладення капіталу. Не включається, якщо передбачається зробити початкове вкладення наприкінці першого періоду; таке початкове вкладення задається у першому записі поля причому у вигляді негативного числа

Обчислює стандартне (середнє квадратичне) відхилення величин, що повертаються nExpression . Середнє квадратичне відхиленняstdвеличин x1,x2, …,xn відaобчислюється за формулою

Повертає суму всіх значень виразуnExpression

Обчислює дисперсію величин D, що повертаютьсяnExpression. Вона дорівнює квадрату стандартного відхилення:

Зауваження. Крім перерахованих у таблиці функцій, виразиeExpressionListможуть містити інші функції. Проте функції таблиці неможливо знайти аргументами інших функцій. Так, можна записати команду

однак наступна команда неприпустима

У результатах, що повертаються функціями,враховуються лише записи, що задовольняють умовам, заданимScope, FOR та WHILE. Поля, що містять NULL, при обчисленні CALCULATE не враховуються.

Приклад. Обчислюються середня та максимальна ціни книг, а також стандартне відхилення цін за даними, що є у таблиці Books. Результати зберігаються в масиві calcResults. В останній елемент масиву заноситься кількість залучених до обчислення записів.

&& Записуємо результати в масив calcResults

calculate Avg(Price), Max(Price), Std(Price) , Cnt( ) to array calcResults

display memory like calcResults

(1) N 195.71 (195.71428571)

(2) N 210.00 (210.00000000)

( 3) N 10.33 ( 10.32630878)

( 4) N 14 ( 14.00000000)

COUNT [Scope] [FORlExpression1] [WHILElExpression2] [TOVarName] [NOOPTIMIZE]

обчислює число записів, які відповідають заданим умовам.

Зауваження. Такі самі результати за інших рівних умов повертає команда CALCULATE, вжита з функцією CNT( ).

SUMeExpressionList[Scope] [FORlExpression1] [WHILElExpression2] [TOVarNameTO ARRAYArrayName] [NOOPTIMIZE]

обчислює суми значень, що повертаються виразами, що входять доeExpressionList. Число сум дорівнює кількості наявних уeExpressionListвиразів.

До обчислень включаються всі числові поля таблиці, якщо параметрExpressionListопущений.

Зауваження. Такі самі результати за інших рівних умов повертає команда CALCULATE, вжита з функцією SUM( ).

TOTAL TOTableNameONFieldName[FIELDSFieldNameList] [Scope] [FORlExpression1] [ WHILElExpression2] [NOOPTIMIZE]

обчислює суми числових полів (підсумки) поточної таблиці за полем (виразом)FieldName, записуючи результат у таблицюTableName.

Якщо таблиця немає, вона буде створена, якщо існує, то перезаписана. Діалог, що попереджає про існування таблиці та надає можливість відмовитися від її перезапису, з'являється, якщо SET SAFETY встановлено у ON.

Опції та параметри (див. також табл. 1.7 та 3.13):

ONFieldName– задає поле чи вираз із полями таблиці, яким групуються результати. Таблиця повинна бути відсортована за цим виразом, або активний індекс повинен бути його як ключовий вираз.

FIELDSFieldNameList– список полів, за якими підбиваються підсумки. Імена полів у списку розділяються комами. Якщо опцію опущено, то підсумки підбиваються по всіх полях.

Число записів в результуючій таблиці дорівнює числу значень, що не збігаються в поліFieldName(з урахуваннямScope- FOR- і WHILE-обмежень). Окремі підсумки обчислюються групи записів з однаковим значенням поляFieldName.

Якщо розмір поля в результуючій таблиці недостатній для зберігання результату, VFP виконує такі дії:

відсікаються позиції з даними після десяткової точки, порція даних, що залишилася, після десяткової точки (якщо відсічені не всі позиції) округляється;

якщо результат, як і раніше, не міститься в полі, то для його відображення використовується наукова нотація (експоненційна форма), за умови, що розмір поля не менше 7;

  • якщо наукова нотація може бути застосована, то виводяться зірочки.