Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

Особый вид выражения, который может быть задан в качестве критерия сортировки, является порядковым номером в списке выходных столбцов. Порядковый номер является позицией столбца в выходном списке, подсчитываемой слева направо, начиная с единицы. В примере 23.4 снова используется простой запрос из примера 23.1, где используются порядковые номера вместо идентификаторов столбцов.

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

SELECT COLA, COLB, COLC, COLD

FROM TABLEA

ORDER BY 1, 4;

Предложение упорядочения для сортировки выхода запроса объединения (union) может использовать только порядковые номера для ссылки на столбцы упорядочивания, как показано в примере 23.5.

Пример 23.5. Упорядочивание наборов UNION

SELECT

T.FIRST_NAME, T.LAST_NAME, 'YES' AS "TEAM LEADER?"

FROM EMPLOYEE T

WHERE EXISTS(SELECT 1 FROM PROJECT P1

WHERE PI.TEAM_LEADER = T.EMP_NO)

UNION

SELECT

E.FIRST_NAME, E.LAST_NAME, 'NO ' AS "TEAM LEADER?"

FROM EMPLOYEE E

WHERE NOT EXISTS(SELECT 1 FROM PROJECT P2

WHERE P2 .TEAM_LEADER = E.EMP_NO)

ORDER BY 2, 1;

В версии 1.0.x упорядочивание по порядковым номерам является единственным способом использования выражений в качестве критерия сортировки, а столбцы, полученные из выражений, должны быть представлены в спецификации вывода (см. пример 23.6). В версии 1.5 у вас есть вариант использования выражения в качестве элемента сортировки без включения элемента выражения в выходной набор, как показано в примере 23.7.

Пример 23.6. Любая версия

SELECT

FULL_NAME, STRLEN (FULL_NAME)

FROM EMPLOYEE

ORDER BY 2 DESC;

Пример 23 7 Firebird 1 5 и выше

SELECT FULL_NAME FROM EMPLOYEE

ORDER BY STRLEN(FULL_NAME) DESC;

Использование порядкового номера полезно для сохранения контроля типов данных и устранения помех, когда выходной набор включает соединения, поскольку все столбцы базы данных, объявленные как критерий упорядочения, должны иметь полностью определенные идентификаторы.

Сортировка по порядковому номеру не увеличивает скорость выполнения запроса; сервер заново вычисляет выражения для операции сортировки.

<p>Направление сортировки</p>

По умолчанию сортировка выполняется в возрастающем порядке. Для выполнения сортировки в убывающем порядке добавьте ключевое слово DESC, как показано в примере 23.8. Если вам нужна убывающая сортировка, создайте для нее убывающий индекс. Firebird не может "инвертировать" возрастающий индекс и использовать его для убывающей сортировки, так же как он не может использовать убывающий индекс для возрастающей сортировки.

Пример 23.8. Убывающий порядок сортировки

SELECT FIRST LU * FROM DOCUMENT

ORDER BY STRLEN(DESCRIPTION) DESC

<p>Размещение пустых значений</p>

По умолчанию Firebird помещает сортируемые столбцы, имеющие NULL, В конец выходного набора. Начиная с версии 1.5, вы можете использовать ключевое слово NULLS FIRST для указания того, что строки с NULL будут помещаться в начало набора, как показано в примере 23.9.

! ! !

ПРИМЕЧАНИЕ. Никакой индекс не может быть использован для сортируемого элемента, если указано NULLS FIRST.

. ! .

Пример 23.9. Размещение пустого значения

SELECT * FROM EMPLOYEE

ORDER BY PHONE_EXT NULLS FIRST

<p>Предложение GROUP BY</p>

Когда запрос включает предложение GROUP BY, TO спецификация столбца и таблицы, а именно:

SELECT {<список-столбцов>}

FROM <спецификация-таблицы>

[WHERE <условие-поиска>]

передается следующей стадии обработки, где строки разделяются на одну или более вложенных групп.

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

Его синтаксис:

SELECT <список-группируемых-полей> FROM <спецификация-таблицы>

[WHERE...]

GROUP BY <группирующий-элемент> [COLLATE последовательность-сортировки]

[, <группирующий-элемент> [. . ] ]

HAVING <предикат-группируемых-столбцов>

[ORDER BY .. .] ;

<p>Список группируемых полей</p>

Группа формируется путем объединения (агрегирования) всех строк, где столбец, указанный в списке столбцов и в предложении GROUP BY, имеет общее значение. Логика агрегирования означает, что заданный в SELECT список полей группирующего запроса резко ограничен полями, указанными в качестве аргументов в предложении GROUP BY. Поля, имеющие спецификации, соответствующие этим требованиям, часто называются группируемыми. Если вы задаете столбец или выражение поля, которые не являются группируемыми, то запрос будет отменен.

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

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

! ! !

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных