Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
database.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.12 Mб
Скачать
  1. Использование функций для работы с датами при организации запроса.

Для вывода определенного набора данных в рамках времени и даты используют функции для работы с датами и временем.

Функция

Назначение

MONTHS_BETWEEN(date1, date2)

Определяет число месяцев, разделяющих две даты. Дробная часть результата представляет собой долю месяца.

ADD_MONTHS(date,n)

Добавление календарных месяцев к дате.

NEXT_DAY(date, ‘char’)

Ближайшая дата, когда наступит заданный день. Аргумент ‘char’ может задавать порядковый номер или название дня недели.

LAST_DAY(date)

Определение последнего дня месяца, содержащего заданную дату.

ROUND(date[, ‘fmt’])

Округление до целого числа суток. Если fmt=YEAR, определяет первый день года.

TRUNC(date[, ‘fmt’])

Возвращает первый день месяца, указанного в аргументе date. Если fmt=YEAR, возвращает дату первого дня года.

SYSDATE()

Возвращает текущую дату и время.

Пример 8: Вывод фамилии и количества отработанных недель для служащих отдела 43.

SELECT fam_cotr, ROUND (SYSDATE - start_date)/7,0

FROM Zaniat

WHERE id_otdel =43;

Пример 9: Вывод номера служащего, даты начала работы, количества отработанных месяцев и даты полугодовой аттестации для всех служащих, работающих менее 48 месяцев.

SELECT id_cotr, start_date,

MONTHS_BETWEEN (SYSDATE, start_date) OTRAB_MEC,

ADD_MONTHS (start_date, 6) ATTEST

FROM Zaniat

WHERE MONTHS_BETWEEN(SYSDATE, start_date)<48;

Пример 10: Вывод номера и даты каждого заказа, принятого торговым представителем номера 11. Вывод дат должен производиться в виде 08/05.

SELECT id, to_char(date_prin, ‘MM/YY’) DATA_PRIN

FROM Zakaz

WHERE id_predstav = 11;

Примечание: Функция TO_CHAR предназначена для преобразования типа даты или типа числа в строку символов в соответствии с форматной моделью.

TO_CHAR(date[, ‘форматная модель’]);

TO_CHAR(number[, ‘форматная модель’]);

Пример 11: Вывод даты следующей пятницы, отстоящей на шесть месяцев от даты заказа. Выходная дата должна иметь следующий вид: Friday, March 12 th, 2005-11-07

SELECT TO_CHAR (NEXT_DAY(ADD_MONTHS (date_zakaz,6), ‘FRIDAY’), ‘fmDAY, Month ddth, YYYY’)

FROM Zakaz;

Тема 8: Группировка строк в запросе

  1. Предложение GROUP BY в команде SELECT. Групповые функции.

  2. Группы внутри групп.

  3. Предложение HAVING.

1. Предложение GROUP BY в команде SELECT. Групповые функции.

По умолчанию все строки таблицы рассматриваются как одна группа. Для разбиения таблицы на меньшие группы строк используется предложение GROUP BY команды SELECT.

Синтаксис:

SELECT {столбец, групповая_функция}

FROM Таблица

[WHERE условие]

[GROUP BY выражение_группирования]

[ORDER BY {Столбец, выражение} [ASC|DESC]];

где выражение_группирования определяет столбец, по значениям которого группируются строки.

Для получения сводной информации по каждой группе можно использовать групповые функции:

Функция

Возвращаемое значение

AVG([DISTINCT|ALL]n)

Среднее значение от n, нулевые значения опускаются

COUNT([ALL]*)

Число строк, извлекаемых в запросе или подзапросе

COUNT([DISTINCT|ALL] expr)

Число строк, для которых expr принимает не пустое значение

MAX([DISTINCT|ALL] expr)

Максимальное значение выражения eхрr

MIN([DISTINCT|ALL] expr)

Минимальное значение выражения eхрr

SUM([DISTINCT|ALL] n)

Сумма значений n

Если в предложение SELECT включена групповая функция, получить одновременно отдельные результаты можно только в случае, если в предложении GROUP BY задан отдельный столбец. Если список столбцов отсутствует, выдается сообщение об ошибке.

Предложение WHERE позволяет исключить некоторые строки до начала разбиения на группы.

Если в списке SELECT заданы столбцы одновременно с групповыми функциями, их список должен использоваться и в предложении GROUP BY. В предложении GROUP BY нельзя использовать позиционные обозначения или псевдонимы столбцов.

По умолчанию строки сортируются в порядке возрастания в соответствии со списком GROUP BY. Изменить порядок сортировки можно с помощью предложения ORDER BY.

Пример 1: Вывести фамилию и количество преподавателей, работающих в 123 группе (таблиц Prep).

SELECT fam, COUNT(*) as “Количество”

FROM Prep

WHERE grup = 123

GROUP BY fam;

Столбец, заданный в предложении GROUP BY, необязательно должен быть задан в предложении SELECT. С другой стороны, если столбец из предложения GROUP BY входит в список SELECT, результат имеет больше смысла.

Если в одной и той же команде SELECT указаны как отдельные элементы данных, так и групповые функции, но пропущено предложение GROUP BY, описывающее эти отдельные элементы, выдается сообщение об ошибке.

Пример 2:

SELECT id_region, COUNT(name)

FROM Klienti;

*

ERROR at line 1:

ORA-00937: not a single-group group function

(Ошибка в строке 1:

групповая функция не для единственной группы).

Для исправления этой ошибки следует добавить предложение GROUP BY.

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