Базовый курс SQL. Вычисляемые поля
Primary tabs
Forums:
Иногда нам нужно извлечь данные не в том формате, в котором они хранятся в таблицах. Например:
- Соединить ФИО, хранящиеся в разных столбцах
- Вычислить стоимость покупки на основе цены товара и количества
- Скомбинировать строку адреса
- Сумма, среднее значение и тп.
Следует знать, что в таком случае SQL предоставляет возможность произвести некоторые преобразования с данными прямо в процессе запроса. Отформатировать полученные "сырые" данные могла бы и клиентская сторона, но как правило, на сервере базы данных это происходит гораздо быстрее.
Вычисляемые поля - это "виртуальные" поля (столбцы) таблицы, не существующие в БД, а создаваемые для нужд пользователя в процессе запроса оператором SELECT.
Конкатенация полей
Конкатенация - "склеивание" нескольких строк в одну.
Допустим, мы создаём список студентов участвующих в творческом конкурсе, и нам требуется указать их возраст в виде Фамилия (возраст). В PostgreSQL соединить значения двух столбцов и добавить скобки мы можем с помощью оператора ||:
SELECT student_surname || ' (' || student_age || ')' FROM Students ORDER BY student_surname;
Получим:
------------------------------------ Адамченко (21 ) Грошев (20 ) Егорова (19 ) Колобков (22 ) Легран (24 ) Петрашевский (22 ) Распопов (22 ) Римский (21 ) Сейдинай (25 ) Шульгина (23 )
Как вы можете увидеть, в результате мы имеем все 4 части, склеенные в одну строку. Но мешают пробелы, которыми было заполнено поле. Чтобы их убрать, воспользуемся функцией RTRIM(), которая удаляет все пробелы, справа от значения. Также, в случае необходимости, можете использовать LTRIM() и TRIM(), удаляющие соответственно пробелы слева от строки или пробелы и слева, и справа.
SELECT RTRIM(student_surname) || ' (' || RTRIM(student_age) || ')' FROM Students ORDER BY student_surname; ------------------------------------ Адамченко (21) Грошев (20) Егорова (19) Колобков (22) Легран (24) Петрашевский (22) Распопов (22) Римский (21) Сейдинай (25) Шульгина (23)
В некоторых других СУБД для конкатенации вместо "||" используется "+".
В MySQL конкатенацию можно осуществить с помощью функции CONCAT().
Псевдонимы вычисляемых полей
Наверное вы заметили, что новый столбец, который мы получили "на лету", не имеет имени. В таком случае мы не сможем обратиться к нему на стороне клиентского приложения. Чтобы решить эту проблему, дадим столбцу псевдоним. Для этого используется ключевое слово AS:
SELECT RTRIM(student_surname) || ' (' || RTRIM(student_age) || ')' AS student_data FROM Students ORDER BY student_surname;
Получим:
student_data ------------------------------------ Адамченко (21) Грошев (20) Егорова (19) Колобков (22) Легран (24) Петрашевский (22) Распопов (22) Римский (21) Сейдинай (25) Шульгина (23)
Теперь мы сможем обращаться к результату данного запроса по имени, так, как если бы это был реальный столбец.
Псевдонимы могут быть использованы и для переименования существующих столбцов таблицы. Обычно это делают для сокращения длинных неудобочитаемых заголовков, но причина может быть и любая другая. Важно помнить, что если вы хотите дать столбцу сложный псевдоним из нескольких слов, его надо будет заключить в кавычки.
Математические операции
Теперь нам нужно определить победителей конкурса. Для этого сложим результаты двух туров и отсортируем список по убыванию:
SELECT student_id, first_round_points, second_round_points, first_round_points + second_round_points AS final_points FROM Participants ORDER BY final_points DESC;
Получим практически готовую турнирную таблицу:
student_id | first_round_points | second_round_points | final_points ------------------------------------------------------------------------------- 92540 | 148 | 115 | 263 92522 | 95 | 124 | 219 92518 | 103 | 59 | 162 92435 | 65 | 89 | 154 92526 | 13 | 36 | 49
В данном случае столбец final_points является вычисляемым полем. В SQL на ряду со сложением (+) могут быть использованы вычитание (-), умножение (*) и деление (/). Для управления порядком вычислений используйте скобки.
Есть и другие способы расчёта суммы значений в SQL, например, с помощью функции SUM().
Подробнее функции мы рассмотрим в следующем разделе.
Следующая страница. Функции() для обработки данных.
Оглавление.
- Log in to post comments
- 4668 reads