Раздел 42 · Аналитика данных с нуля

SELECT и FROM: столбцы, псевдонимы, вычисления

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Бран · продюсер «Хроник Пограничья»

Маркетинг говорит, что большие пачки гемов выгоднее маленьких. Я им не верю. Сколько стоит один гем в каждом оффере? Мне нужна табличка: название, цена, гемы и цена за гем.

В прошлом уроке ты вывел таблицу целиком через SELECT *. Брану же нужны четыре столбца, причём одного из них в базе нет: цену за гем никто не хранит, её надо посчитать. Сегодня учимся выбирать столбцы, давать им имена и считать новые прямо в запросе.

Выписка из ведомости

Представь бухгалтерскую ведомость на двадцать столбцов. Начальник просит: «Дай мне только фамилии и зарплаты, и добавь столбец с зарплатой после налога». Ты не переписываешь ведомость целиком. Ты берёшь чистый лист, выписываешь два нужных столбца и в третьем для каждой строки считаешь новое число.

SELECT делает такую выписку. После слова SELECT перечисляешь через запятую, что положить в результат, а после FROM говоришь, из какой таблицы брать строки. Этот список называют списком выборки.

SELECT name, class, level
FROM characters;
   name    |  class  | level
-----------+---------+-------
 IronSun   | warrior |     5
 Nyzuka80  | rogue   |     3
 Rianash   | priest  |    40
 Sara24    | ranger  |     2
 FireFrost | ranger  |     3
...

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

Почему не всегда звёздочка

SELECT * удобен, чтобы осмотреться. В рабочем запросе лучше перечислять столбцы явно. Причин три. Читателю отчёта не нужны служебные столбцы. Если кто-то добавит в таблицу новый столбец, твой отчёт внезапно поменяет форму. А на больших базах лишние столбцы означают лишнюю работу: об этом поговорим в блоке про производительность.

Считаем прямо в запросе

В списке выборки можно не только называть столбцы, но и считать. Например, цена оффера с НДС 20%:

SELECT title, price_rub, price_rub * 1.2
FROM store_offers;
    title     | price_rub | ?column?
--------------+-----------+----------
 Горсть гемов |     99.00 |  118.800
 Мешок гемов  |    499.00 |  598.800
 Сундук гемов |    999.00 | 1198.800
...

Такое вычисление называют выражением. База берёт каждую строку по отдельности, подставляет её price_rub в формулу и пишет ответ в новый столбец. Работают привычные +, -, *, / и скобки.

Посмотри на заголовок ?column?. База не знает, как назвать посчитанный столбец, и ставит заглушку. Дай ему имя.

урок из курса

Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.