Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

3.2.2.6. Выборка с упорядочением.

Синтаксис:

ORDER BY {[таблица.]столбец | номер_элемента_SELECT} [[ASC] | DESC]

[, {[таблица.]столбец | номер_элемента_SELECT } [ [ASC] | DESC] ] ...]

Простейший вариант этой фразы - упорядочение строк результата по значению одного из столбцов с указанием порядка (ASC возрастание (ASCending)(по умолчанию) или убывания DESC (DESCending)) сортировки.

Пример 10.

Выдать перечень продуктов и содержание в них основных веществ в порядке убывания содержания белка.

Результат

Продукт

Белки

Жиры

Углеводы

Судак

190

80

NULL

Говядина

189

124

NULL

Творог

167

90

13

Яйца

127

115

7

Яблоки

4

NULL

113

SELECT Продукт, Белки,

Жиры, Углеводы

FROM Продукты

ORDER BY Белки DESC;

При включении в список ORDER BY нескольких столбцов, СУБД сортирует строки результата по значениям первого столбца списка, пока не появится несколько строк с одинаковыми значениями данных в этом столбце. Такие строки сортируются по значениям следующего столбца из списка ORDER BY и т.д.

Например, выдать содержимое таблицы Блюда, отсортировав ее строки по видам блюд и основе:

Результат

ID_блюда

Блюдо

Вид

Основа

Вес

Труд

7

Сметана

1

Молоко

140

1

8

Творог

1

Молоко

140

2

2

Салат мясной

1

Мясо

200

4

6

Мясо с гарниром

1

Мясо

250

3

1

Салат летний

1

Овощи

200

3

3

Салат витаминный

1

Овощи

200

4

4

Салат рыбный

1

Рыба

200

4

5

Паштет из рыбы

1

Рыба

120

5

12

Суп молочный

2

Молоко

500

3

9

Суп харчо

2

Мясо

500

5

SELECT *

FROM Блюда

ORDER BY Вид, Основа;

Кроме того, в список ORDER BY можно включать не только имя столбца, а его порядковую позицию в перечне SELECT. Благодаря этому возможно упорядочение результатов на основе вычисляемых столбцов, не имеющих имен.

Например, запрос

SELECT Продукт, ((Белки + Углеводы)*4.1+Жиры*9.3)

FROM Продукты

ORDER BY 2;

Пример 11.

Найти продукт, содержащий наименьшее число калорий

SELECT TOP 1 Продукт,

( ISNULL(Белки,0)+ISNULL(Углеводы,0))*4.1+ISNULL(Жиры,0) *9.3

Результат

Продукт

Масло

8287,5

FROM Продукты

ORDER BY 2 DESC;

Результат упорядочен по убыванию цены, и с помощью TOP 1 в выборку включена только первая строка.

3.2.3. Использование агрегатных функций для подведения итогов.

В SQL существует ряд специальных агрегатных (статических) функций. Каждая из этих функций оперирует совокупностью значений столбца некоторой таблицы и создает единственное значение, определяемое так:

  • COUNT(столбец) – возвращает количество строк с непустым значением (не NULL) в заданном столбце,

  • COUNT(*) – возвращает общее количество строк в выборке, включая строки со значением NULL,

  • SUM (столбец) – возвращает сумму всех значений в пределах группы в заданном столбце, применима только к столбцам с числовыми значениями,

  • AVG (столбец) – возвращает среднее арифметическое для указанного столбца в пределах строк, принадлежащих одной группе, применима только к столбцам с числовым типом данных,

  • MAX(столбец) - возвращает наибольшее значение в указанном столбце в пределах группы,

  • MIN (столбец) - возвращает наименьшее значение в указанном столбце в пределах группы.

Следует отметить, что здесь столбец - это столбец виртуальной таблицы, в которой могут содержаться данные не только из столбца базовой таблицы, но и данные, полученные путем функционального преобразования и (или) связывания символами арифметических операций значений из одного или нескольких столбцов. При этом выражение, определяющее столбец такой таблицы, может быть сколь угодно сложным, но не должно содержать агрегатные функции (вложенность агрегатных функций не допускается). Однако из агрегатных функций можно составлять любые выражения.

Аргументу всех функций, кроме COUNT(*), может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция.

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

  • Список выбора инструкции SELECT (вложенный или внешний запрос).

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