#sql #postgresql
#sql #postgresql
Вопрос:
Вопрос: Напишите запрос, который выбирает все столбцы из файла benn.college_football_players и добавляет дополнительный столбец, в котором отображается имя игрока, если этот игрок младший или старший.
Мой ответ:
SELECT *,
CASE
WHEN year = 'JR' OR 'SR' THEN player_name
ELSE NULL
END AS highlighted_player
FROM benn.college_football_players
Правильный ответ:
SELECT *,
CASE WHEN year IN ('JR', 'SR') THEN player_name ELSE NULL END AS upperclass_player_name
FROM benn.college_football_players
Почему здесь работает функция IN, но не функция = и ИЛИ?
Комментарии:
1. Основная причина в том, что ваша версия синтаксически некорректна.
Ответ №1:
OR
это логический оператор, означающий, что он работает с выражениями true / false . Итак, эта конструкция будет работать:
year = 'JR' OR year = 'SR'
Потому что он анализируется как:
(year = 'JR') OR (year = 'SR')
и эти два выражения являются логическими. Однако это имеет строку и логическое выражение:
(year = 'JR') OR 'SR'
итак, вы получаете сообщение об ошибке.
И, IN
в любом случае, проще и понятнее.
Ответ №2:
Это может работать так:
CASE WHEN year = 'JR' OR year = 'SR' THEN ...
OR
Требуется, чтобы оба термина были логическими выражениями. Но 'SR'
само по себе это просто строка, а не логическое выражение.
Это не должно удивлять никого с опытом программирования. Практически на любом другом языке программирования (Java, C и т.д.) У вас будет аналогичное требование.
Синтаксис кода не английский.
Ответ №3:
Изменить оператор из
SELECT *, CASE WHEN year = 'JR' OR 'SR' ...
Для :
SELECT *, CASE WHEN year = 'JR' OR year = 'SR' ...