Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой_проект_УД_.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
735 Кб
Скачать
☆

19. Коррелированные и некоррелированные подзапросы

В некоторых случаях необходимо выбрать данные из таблицы, основываясь на результатах дополнительных выборок из этой же таблицы. Такие выборки называются коррелированными. Некоррелированным называется подзапрос, который не зависит ни от какого внешнего запроса. Некоррелированный подзапрос не зависит от строки, которую рассматривает внешний запрос. Внешним или главным запрос называется запрос, в котором содержатся все подзапросы. Синтаксис подзапроса такой же, как и у внешнего запроса. Подзапрос записывают в скобках.

Рассмотрим рисунок 19.1, на котором представлен пример получения коррелированного подзапроса. В левой части рисунка показана таблица Table3. В командном окне записан запрос с подзапросом, который использован для выборки товаров, у которых цена меньше, чем средняя. В правой части рисунка показан результат выполнения запроса (Query).

Рисунок 20.1 – Получение коррелированного подзапроса

20. Вычисления в таблицах. Команда calculate

В СУБД Visual FoxPro команда

CALCULATE eExpressionList[Scope] [FOR Expression1]

[WHILE Expression2 [TO VarList | TO ARRAY ArrayName]

[NOOPTIMIZE] [IN nWorkArea | cTableAlias]

выполняет финансовые и статистические операции с полями таблиц или с выражениями, включающими поля, используя в качестве элементов eExpressionList приведенные в таблице 20.1 функции.

Таблица 21.1- Функции, употребляемые в eExpressionList команды CALCULATE

Функция

Описание

AVG(nExpression)

Вычисляет среднее арифметическое всех значений nExpression

CNT() или

COUNT()

Возвращает число записей, удовлетворяющих условиям, заданным Scope, FOR и WHILE

MAX(eExpression)

Возвращает максимальное изо всех значений eExpression. Тип eExpression может быть Character, Date, DateTime, Currency и любой числовой

MIN(eExpression)

Возвращает минимальное изо всех значений eExpression. Тип eExpression может быть Character, Date, DateTime, Currency и любой числовой

NPV(nExpression1, nExpression2 [, nExpression3])

Вычисляет величину чистой приведенной стоимости инвестиции, исполь­зуя ставку дисконтирования nExpressionl, а также стоимости (nExpressionl) будущих выплат (отрицательные значения) и поступлений (положительные значения). Ставка дисконтирования nExpressionl задает­ся не в процентах, а в виде числа от 0 до 1; nExpression2 задает поле или выражение с именем поля или числовое выражение, значения которого интерпретируются как будущие выплаты или поступления. nExpressionl - необязательное начальное вложение капитала. Не включа­ется, если предполагается произвести начальное вложение в конце перво­го периода; такое начальное вложение задается в первой записи поля, причем в виде отрицательного числа

STD(nExpression)

Вычисляет стандартное (средне квадратичное) отклонение величин, воз­вращаемых nExpression. Средне квадратичное отклонение std величин х1, х2, ..., хn от а вычисляется по формуле

std=

VAR(nExpression)

Вычисляет дисперсию D величин, возвращаемых nExpression. Она равна квадрату стандартного отклонения: D — std2.

Помимо перечисленных в таблице функций, выражения eExpressibnList могут содержать и иные функции. Однако функции таблицы не могут быть аргументами иных функций. Так, можно записать команду calculate Avg(Sqrt(Price)), но следующая команда недопустима: calculate Sqrt(Avg(Price))

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

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

set talk off

select Books

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

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

&& Печать результата

display memory like calcResults

Возможный результат:

calcResults

  1. N 195.71 (195.71428571)

  2. N 210.00 (210.00000000)

  3. N 10.33 (10.32630878)

  4. N 14 (14.00000000)

34

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]