img

SQL: оператор case – примеры запросов

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

 

Если вы хотите добавить какое-то значение в ячейку, и это зависит от некоторого условия, завязанного на других ячейках, то вам нужен SQL-оператор case. 

Если вы знакомы с другими языками, то можно сказать, что оператор case – это тот же оператор if или switch. С его помощью вы можете указать значения для разных условий, так что вы можете получить различные значения в ячейке в зависимости от того, какое условие выполнится. 

Этот оператор может быть очень полезен в анализе данных, так что после того, как мы ознакомимся с самим оператором case, мы рассмотрим пару примеров, как их можно использовать в анализе данных.

Синтаксис SQL-оператора case

Его синтаксис имеет довольно много нюансов, но при этом он интуитивно понятный: ключевое слово CASE свидетельствует о начале оператора case, а ключевое слово END - о его конце.

К тому же для отдельного условия вы можете записать ключевое слово WHEN, а после него условие, которое должно быть выполнено. Затем следует ключевое слово THEN и значение для этого условия, например, WHEN <условие> THEN <содержимое>.

Дальше могут следовать другие операторы WHEN/THEN

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

CASE
   WHEN условие1 THEN содержимое
   WHEN условие2 THEN другое содержимое
   ...
   ELSE содержимое по умолчанию
END

Давайте реализуем это на практике, чтобы лучше понять.

Примеры с SQL-оператором case

Давайте применим оператор case на практике. У нас есть таблица со списком студентов и их экзаменационными баллами. Нам нужно поставить каждому студенту оценку. Мы можем сделать это автоматически, а для этого нам нужен оператор case.

id

name

score

1

Simisola

60

2

Ivan

80

3

Metodija

52

4

Callum

98

5

Leia

84

6

Aparecida

82

7

Ursula

69

8

Ramazan

78

9

Corona

87

10

Alise

57

11

Galadriel

89

12

Merel

99

13

Cherice

55

14

Nithya

81

15

El?ad

71

16

Liisi

90

17

Johanna

90

18

Anfisa

90

19

Ry?suke

97

20

Sakchai

61

21

Elbert

63

22

Katelyn

51

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

Для начала запишем оператор CASE со схемой распределения оценок. Если значение score равно 94 и выше, то в строке записывается значение A. Если же значение score равно 90 и выше, то записывается значение A-, и т.д.

  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END

После того, как мы написали оператор CASE, мы можем добавить его в запрос. После чего мы воспользуемся ключевым словом AS и дадим столбцу название grade:

SELECT *,
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade
FROM students_grades;

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

id

name

score

grade

1

Simisola

60

D

2

Ivan

80

B-

3

Metodija

52

F

4

Callum

98

A

5

Leia

84

B

6

Aparecida

82

B-

7

Ursula

69

D+

8

Ramazan

78

C+

9

Corona

87

B+

10

Alise

57

F

11

Galadriel

89

B+

12

Merel

99

A

13

Cherice

55

F

14

Nithya

81

B-

15

El?ad

71

C-

16

Liisi

90

A-

17

Johanna

90

A-

18

Anfisa

90

A-

19

Ry?suke

97

A

20

Sakchai

61

D

21

Elbert

63

D

22

Katelyn

51

F

Более сложные примеры с SQL-оператором case

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

Оператор case: пример 1

Например, мы можем воспользоваться оператором ORDER BY для того, чтобы отсортировать строки так, чтобы студенты с наивысшими оценками были на верхних строчках. 

SELECT name,
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade
FROM students_grades
ORDER BY score DESC;

Мы упорядочиваем строки, основываясь на столбце score, значения которого являются числами, а не на столбце grade, так как алфавитный порядок не совпадает с порядком числовых оценок. Для того, чтобы отобразить строки в порядке убывания, то есть так, чтобы наибольшие значения были наверху, мы используем ключевое слово DESC.

Таблица будет выглядеть следующим образом:

name

grade

Merel

A

Callum

A

Ry?suke

A

Liisi

A-

Johanna

A-

Anfisa

A-

Galadriel

B+

Corona

B+

Leia

B

Aparecida

B-

Nithya

B-

Ivan

B-

Ramazan

C+

El?ad

C-

Ursula

D+

Elbert

D

Sakchai

D

Simisola

D

Alise

F

Cherice

F

Metodija

F

Katelyn

F

Оператор case: пример 2

Давайте немного проанализируем эти данные. Подсчитаем, сколько студентов получили каждую оценку. Для этого воспользуемся операторами GROUP BY и COUNT.

SELECT 
  CASE
    WHEN score >= 94
      THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade,
  COUNT(*) AS number_of_students
FROM students_grades
GROUP BY grade
ORDER BY score DESC;

Мы используем оператор ORDER BY для того, чтобы упорядочить оценки в порядке убывания, и для этого мы используем столбец score, так как в нем хранятся числовые значения (а вот упорядочение по столбцу grade будет использовать алфавитный порядок, который не будет совпадать с порядком оценок, выстроенном по числовым значениям).

grade

number_of_students

A

3

A-

3

B+

2

B

1

B-

3

C+

1

C-

1

D+

1

D

3

F

4

Оператор case: пример 3

Давайте проанализируем данные немного по-другому. Мы воспользуемся операторами GROUP BY и COUNT, а также оператором case (но немного другим) для того, чтобы подсчитать, сколько студентов сдали экзамен. После чего мы можем применить оператор ORDER BY для того, чтобы расположить значения столбца с количеством студентов, успешно сдавших экзамен, в том порядке, который нам нужен.

SELECT 
  CASE
    WHEN score >= 60
      THEN "passed"
    ELSE "failed"
  END AS result,
  COUNT(*) AS number_of_students
FROM students_grades
GROUP BY result
ORDER BY result DESC;

Вот так выглядит таблица, которую мы получили в результате. Не такая уж и плохая группа – 18 из 22 студентов сдали экзамен, а вот оставшимся 4 студентам может потребоваться помощь.

result

number_of_students

passed

18

failed

4

Заключение

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

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

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Программирование
Скидка 25%
Python Advanced. Продвинутый курс
Освойте асинхронное и метапрограммирование, изучите аннотацию типов и напишите собственное приложение на FastAPI. Улучшите свои навыки Python, чтобы совершить быстрый рост вашего грейда до уровня middle.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Гипервизор - это программное обеспечение для виртуализации, используемое для создания и запуска виртуальных машин (ВМ). Гипервиз
img
Виртуализация серверов позволяет запускать несколько виртуальных машин на одном физическом сервере. Запуск виртуальных машин (ВМ
img
Сегодня мы рассмотрим, как настроить и использовать PHP в проекте. Но прежде чем начать, нужно понять, что такое PHP. Что такое
img
Как разработчик, вы знаете, что HTML расшифровывается как HyperText Markup Language (язык разметки гипертекста). HTML — это язык
img
Бесконечные споры вокруг искусственного интеллекта приводят к путанице. Существует много терминов, которые кажутся похожими, но
img
SVG расшифровывается как масштабируемая векторная графика. Это веб-дружелюбный векторный формат файлов, используемый для отображ
21 ноября
20:00
Бесплатный вебинар
Введение в Docker