Для вывода определенного набора данных в рамках времени и даты используют функции для работы с датами и временем.
Функция | Назначение |
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: Группировка строк в запросе
Предложение GROUP BY в команде SELECT. Групповые функции.
Группы внутри групп.
Предложение HAVING.
Предложение 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 “Количество”