Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Условия упорядочения и группирования
Разделы на этой странице:
Условия упорядочения и группирования
Когда выходное поле создается в выражении, оно может быть использовано для установления условий упорядочения или группирования набора. При этом синтаксис правил для выражений в ORDER BY и GROUP BY различается, также существуют различия между версиями 1.0.x и 1.5.
Выражения для ORDER BY
На поле, созданное во время выполнения с использованием выражения, не может быть ссылок как на условие в предложении ORDER BY по его алиасу. Оно может быть использовано с помощью ссылки на его номер в наборе - то есть на его позицию в строке, считая единицей позицию самого левого выходного поля. Например, следующее
SELECT
MEMBER_ID,
LAST_NAME || ', ' || FIRST_NAME AS FULL_NAME,
JOIN_DATE
FROM MEMBERSHIP
ORDER BY 2;
создает список, упорядоченный по полю, полученному в результате конкатенации.
В версии 1.5 и более поздних в наборах, отличных от UNION, условие упорядочения может быть выражением, возвращающим значение, которое может оказаться осмысленным для упорядочения. Например, предложение ORDER BY В следующем операторе вызывает функцию, которая возвращает длину столбца описания и использует ее для упорядочения выходного набора от большего к меньшему:
SELECT DOCUMENTED, TITLE, DESCRIPTION FROM DOCUMENT
ORDER BY STRLEN(DESCRIPTION) DESC;
Выражения для GROUP BY
В SQL оператор GROUP BY используется для собирания наборов данных и иерархической их организации или суммирования.
Во всех версиях Firebird вы можете выполнять иерархическое группирование, основанное на вызове внешней функции (UDF), однако в версии 1.0.x вы не можете использовать порядковый номер выходного столбца в качестве условия группирования. Firebird 1.5 добавляет возможность использования в GROUP BY порядкового номера, а также несколько других типов выражений, включая выражения подзапросов.
Другие изменения в Firebird 1.5 ужесточают отдельные правила группирования, убирая поддержку некоторых неправильных вариантов синтаксиса группирования, которые были допустимы в Firebird 1.0.x.
Правила и взаимодействия выражений для группирования и упорядочения иногда являются сложными в реализации. Эти темы подробно обсуждаются в главе 23.
Следующий пример для версии 1.5 запрашивает в таблице MEMBERSHIP и выводит статистику, показывающую количество участников, объединенных в каждом месяце:
SELECT
MEMBER_TYPE,
EXTRACT(MONTH FROM J0IN_DATE) AS MONTH_NUMBER,
/* 1, 2, и т.д. */
F_CMONTHLONG(JOIN_DATE) AS SMONTH,
/* UDF, возвращающая месяц в виде строки */
COUNT (*) AS MEMBERS_JOINED
FROM MEMBERSHIP
GROUP BY
MEMBER_TYPE, EXTRACT(MONTH FROM JOIN_DATE);
- 11.2. Технология принятия решения в условиях чрезвычайной ситуации
- Условия CHECK
- Условия копирования, распространения и модификации программных продуктов
- Предусловия и постусловия
- Условия поиска
- 1.3. Информационная безопасность в условиях функционирования в России глобальных сетей
- Постусловия
- Как применить эти условия договора к своим новым программам
- Использование идентификатора UID в качестве условия
- ОПЕРАЦИЯ УСЛОВИЯ: ?:
- Какие условия при продаже по телефону должны совпасть, чтобы покупка состоялась
- Перехват клиента. Борьба за продажи в условиях жесткой конкуренции