Where sql оператор: Оператор SQL WHERE: примеры, синтаксис

Оператор SQL WHERE: примеры, синтаксис

Оператор SQL WHERE служит для задания дополнительного условия выборки, операций вставки, редактирования и удаления записей.

Оператор SQL WHERE имеет следующий синтаксис:

WHERE condition

Условие (condition) может включать в себя предикаты AND, OR, NOT, LIKE, BETWEEN, IS, IN, ключевое слово NULL, операторы сравнения и равенства (<, >, =).


Примеры оператора SQL WHEREИмеется следующая таблица Planets:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
1Mars33966871659NoChristiaan Huygens
2Saturn6026810759. 22Yes
3Neptune24764601901846YesJohn Couch Adams
4Mercury2439115.881631NoNicolaus Copernicus
5Venus60512431610NoGalileo Galilei

Пример 1. Используя оператор SQL WHERE вывести записи, значение радиуса (Radius) которых находится в пределах от 3000 до 9000:

SELECT * FROM Planets WHERE Radius BETWEEN 3000 AND 9000

Результат:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
1Mars33966871659NoChristiaan Huygens
5Venus60512431610NoGalileo Galilei

Пример 2.  Используя оператор SQL WHERE вывести название планеты (PlanetName), год ее открытия (OpeningYear) и имя первооткрывателя (Opener), планет, чье название не начинается или не заканчивается на букву «s»:

SELECT PlanetName, OpeningYear, Opener
FROM Planets
WHERE PlanetName NOT LIKE '%s'
AND PlanetName NOT LIKE 'S%'

Результат:

PlanetNameOpeningYearOpener
Neptune1846John Couch Adams
Mercury1631Nicolaus Copernicus

Условный оператор WHERE

Ситуация, когда требуется сделать выборку по определённому условию,
встречается очень часто. Для этого в операторе SELECT существует оператор WHERE, после которого следуют
условия для ограничения строк. Если запись удовлетворяет этому условию, то
попадает в результат, иначе отбрасывается.

SELECT [DISTINCT] поля_таблиц FROM наименование_таблицы
WHERE условие_на_ограничение_строк
[логический_оператор другое_условие_на_ограничение_строк];

Например, запрос с использованием оператора WHERE может выглядеть следующим образом:

SELECT * FROM Student
WHERE first_name = "Grigorij" AND YEAR(birthday) > 2000;

idfirst_namemiddle_namelast_namebirthdayaddress
33GrigorijGennadevichKapustin2001-12-13T00:00:00.000Zul. Pervomajskaya, d. 45, kv. 6
65GrigorijKirillovichKolobov2003-07-17T00:00:00.000Zul. CHernova, d. 9, kv. 34

В нем используются:

  • два оператора сравнения
    first_name = «Grigorij» и YEAR(birthday) > 2000;
  • один логический оператор AND

Как результат, в выборке мы получаем данные студентов, которые имеют имя «Grigorij» и в тоже время чей год рождения больше 2000.

Операторы сравнения служат для сравнения 2 выражений, результатом которого может являться:

  • true (что эквивалентно 1)
  • false (что эквивалентно 0)
  • NULL

ОператорОбозначениеОписание
Равенство=Если оба значения равны, то результат будет равен 1, иначе 0
Эквивалентность<=>Аналогичен оператору равенства, за исключением того, что результат будет равен 1 в случае сравнения NULL с NULL и 0, когда идёт сравнение любого значения с NULL
Неравенство<> или !=Если оба значения не равны, то результат будет равен 1, иначе 0
Меньше<Если одно значение меньше другого, то результат будет равен 1, иначе 0
Меньше или равно<=Если одно значение меньше или равно другому, то результат будет равен 1, иначе 0
Больше>Если одно значение больше другого, то результат будет равен 1, иначе 0
Больше или равно>=Если одно значение больше или равно другому, то результат будет равен 1, иначе 0

Результатом сравнения любого значения с NULL является NULL. Исключением является оператор эквивалентности.

Попробуйте выполнить запрос и самостоятельно поиграться с этими операторами в песочнице:

SELECT
    2 = 1,
	'a' = 'a',
	NULL <=> NULL,
	2 <> 2,
	3 < 4,
	10 <= 10,
	7 > 1,
	8 >= 10;

2 = 1‘a’ = ‘a’NULL <=> NULL2 <> 23 < 410 <= 107 > 18 >= 10
01101110

Логические операторы необходимы для связывания операторов сравнения.

ОператорОписание
NOTМеняет значение оператора сравнения на противоположный
ORВозвращает общее значение выражения истинно, если хотя бы одно из них истинно
ANDВозвращает общее значение выражения истинно, если они оба истинны
XORВозвращает общее значение выражения истинно, если один и только один аргумент является истинным

Давайте для примера выведем все полёты, которые были совершены на самолёте «Boeing», но, при этом, вылет был не из Лондона:

SELECT * FROM Trip
WHERE plane = 'Boeing' AND NOT town_from = 'London';

Изучение оператора SQL WHERE

В этой статье речь пойдет об операторе SQL WHERE.

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

Язык структурированных запросов (SQL) использует предложение SQL WHERE для фильтрации данных на основе применяемых условий. Он обычно используется в операторе Select, Update или delete .

Давайте продолжим и рассмотрим предложение WHERE, его синтаксис, использование для одного или нескольких условий, включая и исключая данные на основе выражения запроса.

Введение в SQL Где Статья

Предложение Where полезно в операторах SQL Select, Update, Delete для фильтрации данных, удовлетворяющих определенному условию. Следующий запрос SQL извлекает все данные, хранящиеся в таблице [SalesLT].[SalesOrderDetail]. Как показано ниже, он извлекает 540 записей.

 

  SELECT * FROM SalesLT.SalesOrderDetail

 

Предположим, ваш клиент звонит в службу поддержки клиентов, чтобы получить некоторую информацию о своем заказе. Если таблица огромна, и вы извлекаете все записи для поиска определенного идентификатора заказа клиента. В этом случае,

  • Выполнение запроса займет больше времени из-за количества записей
  • Ваше время обработки будет выше, и вы можете не удовлетворить клиентов из-за длительного удержания
  • Трудно найти конкретный идентификатор заказа, если набор данных огромен и несортирован.

Поэтому вы можете добавить предложение where после предложения from и указать условие. Оптимизатор запросов извлечет только определенные строки, удовлетворяющие условиям, и отобразит их вам.

 

  SELECT * FROM SalesLT.SalesOrderDetail WHERE SalesOrderID=71776

 

Давайте сравним выполнение обоих запросов с точки зрения производительности.

  • Запрос 1 имеет относительную стоимость 70 % в пакете и использует оператор сканирования кластеризованного индекса.
  • Запрос 2 относительно дешевле, чем запрос (стоимость 30%), и он использует оператор поиска по кластеризованному индексу.

Если мы глубоко погрузимся в сканирование кластерного индекса и операторы поиска, мы увидим разницу в предполагаемой стоимости ЦП, стоимости ввода-вывода, количестве прочитанных строк.

Примечание. Операторы плана выполнения и их производительность зависят от различных факторов, таких как индекс, статистика, методы написания запросов.

Оператор SQL WHERE Примеры

Давайте рассмотрим примеры предложения WHERE в SQL в этом разделе.

Оператор SQL WHERE с числовым сравнением

Вы можете использовать предложение where с числовым сравнением для поддерживаемого типа столбца, такого как int, bigint.

 

  SELECT * FROM SalesLT.SalesOrderDetail WHERE OrderQty=1

 

Примечание. Вы не можете использовать числовое сравнение для столбца с другими типами данных, такими как varchar, nvarchar.

Оператор SQL WHERE со сравнением символов

По умолчанию SQL Server выполняет поиск без учета регистра. Вы можете фильтровать записи из таблицы, используя такие символы, как строки. Например, ниже запрос возвращает записи с названиями продуктов, указанными в предложении where.

 

  SELECT * FROM SalesLT.Product  WHERE name=’awc Logo Cap’

 

Если мы указываем строки в верхнем или нижнем регистре, SQL Server возвращает аналогичные результаты.

 

  SELECT * FROM SalesLT.Product  WHERE name=’AWC LOGO CAP’

 

Оператор SQL Where с операторами сравнения

SQL Server имеет различные операторы сравнения для построения условия и возвращает результаты, удовлетворяющие запросу. Операторы сравнения приведены ниже.

  • оператор равенства (=)
  • больше (>) и меньше (<)
  • больше или равно (>=)
  • меньше или равно (<=)
  • не равно(<>)

Например, в приведенном ниже запросе используется оператор «не равно» (<>) в предложении where, чтобы исключить имя продукта, указанное в предложении where.

 

  SELECT * FROM SalesLT.Product  WHERE name<>‘AWC LOGO CAP’

 

Точно так же приведенный ниже запрос возвращает все продукты, у которых идентификатор продукта больше или равен 800.

 

  SELECT * FROM SalesLT.Product  WHERE ProductID >= 800

 

Оператор SQL Where с логическими операторами

SQL Server имеет логические операторы, которые возвращают истинный или ложный результат при определенных условиях. Это логические операторы И, ИЛИ и НЕ.

  • Операторы И В операторах И все выражения должны удовлетворять для получения результатов.
  • Запрос возвращает записи, удовлетворяющие следующим условиям.
  • Цвет = красный
  • Название= Дорога-150 Красная, 44

 

  SELECT * FROM SalesLT.Product  WHERE color= ‘Red’ and [Name]=’Road-150 Red, 44′

 

Если какое-либо из условий не возвращает true, запрос не получает никаких записей в выходных данных.

  • Оператор ИЛИ: если какое-либо из условий удовлетворяет предложению ИЛИ, запрос возвращает результат.
  • Запрос возвращает записи, удовлетворяющие хотя бы одному из следующих условий.
  • Цвет = синий
  • Название= Дорога-150 Красная, 44

 

  SELECT * FROM SalesLT.Product  WHERE color= ‘Blue’ OR

  [Name]=’Road-150 Red, 44′

 

  • Оператор Not: оператор Not обращает результат условия. Например, приведенный ниже запрос возвращает запрос с идентификатором продукта 707 или 708.

Мы можем использовать логический оператор НЕ, чтобы исключить из вывода идентификатор продукта 707 или 708.

Использовать оператор SQL where с датами

Запрос SQL может фильтровать записи, используя столбец даты. Это похоже на символьные типы данных и записи фильтров операторов сравнения.

 

  ВЫБЕРИТЕ ProductID, Имя, SellStartDate FROM SalesLT.Product  

  ГДЕ SellStartDate>=’2005-06-30′

 

Функции в операторе where

Вы можете комбинировать такие функции, как YEAR(), Month() в предложении where для фильтрации записей по определенному условию. Например, приведенный ниже запрос использует функцию year() и находит записи, дата начала продажи которых — 2005 год.

 

  ВЫБЕРИТЕ ProductID, Имя, SellStartDate FROM SalesLT.Product  

  ГДЕ year(SellStartDate)=’2005′

 

Обновление и удаление с помощью инструкции WHERE

Оператор обновления также использует предложение where для обновления определенных строк. Например, если вы хотите обновить стоимость определенного продукта, вы можете указать идентификатор продукта в предложении where и обновить записи.

Примечание. Предложение where означает, что если вы не укажете условие where в операторе обновления, SQL-запрос обновит все записи в таблице.

 

  UPDATE SalesLT.Product  

  SET standardcost=100

  WHERE Productid=710

 

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

 

  УДАЛИТЬ из SalesLT.Product WHERE Productid=710

 

Пункты «Где и наличие»

Иногда вы работаете с агрегированными данными, такими как среднее значение, минимальное и максимальное значения. Вы не можете фильтровать записи из агрегированных данных с помощью предложения where. Поэтому в определенных случаях, таких как функция GROUP BY, MAX(), MIN(), AVG(), мы можем использовать предложение HAVING для фильтрации записей.

Например, приведенный ниже сценарий T-SQL группирует строки на основе идентификатора продукта и вычисляет среднюю цену, используя функцию AVG() для идентификатора продукта больше 976. Он использует предложение have для фильтрации записей из агрегированных данных.

 

  ВЫБРАТЬ avg(standardcost) as AvgPrice,ProductID FROM SalesLT.Product  

  GROUP BY ProductID

  HAVING  ProductID>976

 

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

 

  ВЫБЕРИТЕ СУММУ(стандартная стоимость) как СУММЦена,ID продукта из SalesLT.Product  

  ГРУППИРОВАТЬ ПО ProductID

  ИМЕЕТ ProductID между 976 И 980

9000 2  

Полезные сведения об операторе WHERE

  • Вам следует избегать выбора всех записей из большой таблицы, чтобы избежать проблем с производительностью. Хорошо использовать предложение SQL Where, чтобы ограничить количество строк в выводе.
  • Вы можете использовать предложение where для числовых, символьных типов данных, логических операторов сравнения.
  • Вы всегда должны использовать оператор удаления с предложением where. Если вы хотите удалить все записи из таблицы, используйте оператор TRUNCATE TABLE.
  • Вы можете комбинировать несколько условий в предложении where и комбинировать их с логическими операторами.
  • Автор
  • Последние сообщения

Раджендра Гупта

Привет! Я Раджендра Гупта, специалист по базам данных и архитектор, помогаю организациям быстро и эффективно внедрять решения Microsoft SQL Server, Azure, Couchbase, AWS, устранять связанные проблемы и настраивать производительность с более чем 14-летним опытом.

Я автор книги «DP-300 Administering Relational Database on Microsoft Azure». Я опубликовал более 650 технических статей о MSSQLTips, SQLShack, Quest, CodingSight и MultipleNines.

Я создатель одной из крупнейших бесплатных онлайн-коллекций статей по одной теме, включая его серию из 50 статей о группах доступности SQL Server Always On.

На основании моего вклада в сообщество SQL Server я был признан престижным лучшим автором года непрерывно в 2019, 2020 и 2021 годах (2-й ранг) в SQLShack и награждение чемпионов MSSQLTIPS в 2020 году.

Личный блог: https://www.dbblogger.com
помогите, свяжитесь со мной по адресу [email protected]

Просмотреть все сообщения Раджендры Гупты

Последние сообщения Раджендры Гупты (посмотреть все)

SQL CASE | Промежуточный SQL

Начиная здесь? Этот урок является частью полного учебника по использованию SQL для анализа данных. Проверьте начало.

В этом уроке мы рассмотрим:

  • Оператор SQL CASE
  • Добавление нескольких условий в оператор CASE
  • Краткий обзор основ CASE
  • Использование CASE с агрегатными функциями
  • Использование CASE внутри агрегатных функций
  • Практические задачи

В течение следующих нескольких уроков вы будете работать с данными о футболистах колледжей. Эти данные были собраны с ESPN 15 января 2014 г. из списков, перечисленных на этой странице, с помощью парсера Python, доступного здесь. В этом конкретном уроке вы будете придерживаться информации о ростере. Эта таблица говорит сама за себя — одна строка на игрока со столбцами, описывающими атрибуты этого игрока. Запустите этот запрос, чтобы проверить необработанные данные:

 ВЫБЕРИТЕ * ИЗ benn.college_football_players
 

Оператор CASE — это способ SQL для обработки логики if/then. За оператором CASE следует как минимум одна пара операторов WHEN и THEN — эквивалент SQL оператора IF/THEN в Excel. Из-за этой пары у вас может возникнуть соблазн назвать это SQL CASE WHEN , но CASE является принятым термином.

Каждый оператор CASE должен заканчиваться цифрой 9.0455 КОНЕЦ заявление. Оператор ELSE является необязательным и предоставляет способ захвата значений, не указанных в операторах WHEN / THEN . CASE проще всего понять в контексте примера:

 SELECT player_name,
       год,
       СЛУЧАЙ, КОГДА год = 'SR' THEN 'да'
            ELSE NULL END AS is_a_senior
  ОТ benn.college_football_players
 

Проще говоря, вот что происходит:

  1. Оператор CASE проверяет каждую строку на предмет истинности условного оператора — year = 'SR' .
  2. Для любой заданной строки, если это условное утверждение истинно, слово «да» печатается в столбце, который мы назвали is_a_senior .
  3. В любой строке, для которой условное выражение ложно, ничего не происходит в этой строке, оставляя нулевое значение в столбце is_a_senior .
  4. В то же время, когда все это происходит, SQL извлекает и отображает все значения в player_name и год столбцов.

Приведенный выше запрос довольно легко увидеть, что происходит, потому что мы включили оператор CASE вместе с самим столбцом year . Вы можете проверить каждую строку, чтобы увидеть, соответствует ли год условию год = «SR» , а затем просмотреть результат в столбце, сгенерированном с помощью инструкции CASE .

Но что, если вам не нужны нулевые значения в is_a_senior колонка? Следующий запрос заменяет эти нули на «нет»:

 SELECT player_name,
       год,
       СЛУЧАЙ, КОГДА год = 'SR' THEN 'да'
            ELSE 'no' END AS is_a_senior
  ОТ benn.college_football_players
 

Практическая задача

Напишите запрос, включающий столбец с пометкой «да», если игрок из Калифорнии, и сначала отсортируйте результаты с этими игроками.

ПопробуйтеСмотреть ответ

Вы также можете определить количество результатов в CASE , включив любое количество операторов WHEN / THEN :

 SELECT player_name,
       масса,
       СЛУЧАЙ, КОГДА вес > 250, ТОГДА «более 250»
            КОГДА вес > 200, ТОГДА "201-250"
            КОГДА вес > 175, ТОГДА '176-200'
            ELSE '175 или меньше' END AS Weight_group
  ОТ benn. college_football_players
 

В приведенном выше примере операторы WHEN / THEN будут оцениваться в том порядке, в котором они написаны. Итак, если значение в вес столбца данной строки равен 300, это даст результат «более 250». Вот что произойдет, если значение в столбце Weight равно 180, SQL сделает следующее:

  1. Проверьте, больше ли Weight 250. 180 не больше 250, поэтому переходите к следующему КОГДА / ТОГДА
  2. Проверьте, не превышает ли вес 200. 180 не больше 200, поэтому переходите к следующему КОГДА / ЗАТЕМ
  3. Проверьте, не больше ли weight 175. 180 — это больше 175, поэтому запишите «175-200» в столбце weight_group .

Несмотря на то, что все вышеперечисленное работает, на самом деле лучше всего создавать операторы, которые не перекрываются. КОГДА вес > 250 и КОГДА вес > 200 перекрываются для каждого значения больше 250, что немного сбивает с толку. Лучше написать это так:

 SELECT player_name,
       масса,
       СЛУЧАЙ, КОГДА вес > 250, ТОГДА «более 250»
            КОГДА вес > 200 И вес <= 250, ТО '201-250'
            КОГДА вес > 175 И вес <= 200, ТОГДА '176-200'
            ELSE '175 или меньше' END AS Weight_group
  ОТ benn.college_football_players
 

Практическая задача

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

ПопробуйтеСмотреть ответ

Вы также можете объединить несколько условных операторов с И и ИЛИ точно так же, как в ГДЕ 9Предложение 0456:

 ВЫБРАТЬ player_name,
       СЛУЧАЙ, КОГДА год = 'FR' И позиция = 'WR', ТО 'frosh_wr'
            ELSE NULL END AS sample_case_statement
  ОТ benn. college_football_players
 

Краткий обзор основ CASE:

  1. Оператор CASE всегда находится в предложении SELECT
  2. .

  3. ДЕЛО должно включать следующие компоненты: КОГДА , ТОГДА и КОНЕЦ . ELSE является дополнительным компонентом.
  4. Вы можете сделать любой условный оператор, используя любой условный оператор (например, WHERE ) между WHEN и THEN . Это включает в себя объединение нескольких условных операторов с использованием И и ИЛИ .
  5. Вы можете включить несколько операторов WHEN , а также оператор ELSE для работы с любыми неадресованными условиями.

Практическая задача

Напишите запрос, который выбирает все столбцы из benn.college_football_players и добавляет дополнительный столбец, в котором отображается имя игрока, если этот игрок является младшим или старшим.

Попробуйте См. ответ

Использование CASE с агрегатными функциями

Несколько более сложная и существенно более полезная функциональность CASE достигается за счет объединения его с агрегатными функциями. Например, допустим, вы хотите подсчитывать только те строки, которые соответствуют определенному условию. Поскольку COUNT игнорирует нули, вы можете использовать Оператор CASE для оценки условия и получения нулевых или ненулевых значений в зависимости от результата:

 SELECT CASE WHEN year = 'FR' THEN 'FR'
            ELSE 'Not FR' END AS year_group,
            COUNT(1) КАК считать
  ОТ benn.college_football_players
 СГРУППИРОВАТЬ ПО РЕГИСТРУ, КОГДА год = 'FR', ТОГДА 'FR'
               ELSE 'Не FR' END
 

Теперь вы можете подумать: "Почему бы мне просто не использовать предложение WHERE для фильтрации строк, которые я не хочу учитывать?" Вы могли бы сделать это — это выглядело бы так:

 ВЫБРАТЬ СЧЕТЧИК(1) КАК fr_count
  ОТ benn. college_football_players
 ГДЕ год = 'FR'
 

Но что, если вы также хотите посчитать пару других условий? Использование предложения WHERE позволяет учитывать только одно условие. Вот пример подсчета нескольких условий в одном запросе:

 SELECT CASE WHEN year = 'FR' THEN 'FR'
            КОГДА год = «ТАК», ТОГДА «ТАК»
            КОГДА год = 'JR', ТОГДА 'JR'
            КОГДА год = 'SR', ТОГДА 'SR'
            ELSE 'Нет данных за год' END AS year_group,
            COUNT(1) КАК считать
  ОТ benn.college_football_players
 СГРУППИРОВАТЬ ПО 1
 

Приведенный выше запрос является отличным местом для использования чисел вместо столбцов в предложении GROUP BY , потому что повторение оператора CASE в предложении GROUP BY сделало бы запрос неприемлемо длинным. В качестве альтернативы вы можете использовать псевдоним столбца в предложении GROUP BY следующим образом:

 SELECT CASE WHEN year = 'FR' THEN 'FR'
            КОГДА год = «ТАК», ТОГДА «ТАК»
            КОГДА год = 'JR', ТОГДА 'JR'
            КОГДА год = 'SR', ТОГДА 'SR'
            ELSE 'Нет данных за год' END AS year_group,
            COUNT(1) КАК считать
  ОТ benn. college_football_players
 ГРУППА ПО year_group
 

Обратите внимание: если вы решите повторить весь оператор CASE , вам следует удалить имя столбца AS year_group при копировании/вставке в предложение GROUP BY :

 SELECT CASE WHEN year = 'FR' ТОГДА 'ФР'
            КОГДА год = «ТАК», ТОГДА «ТАК»
            КОГДА год = 'JR', ТОГДА 'JR'
            КОГДА год = 'SR', ТОГДА 'SR'
            ELSE 'Нет данных за год' END AS year_group,
            COUNT(1) КАК считать
  ОТ benn.college_football_players
 СГРУППИРОВАТЬ ПО РЕГИСТРУ, КОГДА год = 'FR', ТОГДА 'FR'
               КОГДА год = «ТАК», ТОГДА «ТАК»
               КОГДА год = 'JR', ТОГДА 'JR'
               КОГДА год = 'SR', ТОГДА 'SR'
               ELSE 'Нет данных за год' END
 

Сочетание операторов CASE с агрегатами поначалу может быть сложным. Часто бывает полезно сначала написать запрос, содержащий оператор CASE , а затем выполнить его самостоятельно. Используя предыдущий пример, вы можете сначала написать:

 SELECT CASE WHEN year = 'FR' THEN 'FR'
            КОГДА год = «ТАК», ТОГДА «ТАК»
            КОГДА год = 'JR', ТОГДА 'JR'
            КОГДА год = 'SR', ТОГДА 'SR'
            ELSE 'Нет данных за год' END AS year_group,
            *
  ОТ benn.college_football_players
 

Приведенный выше запрос покажет все столбцы таблицы benn.college_football_players , а также столбец, показывающий результаты оператора CASE . Оттуда вы можете заменить * агрегацией и добавить предложение GROUP BY . Попробуйте этот процесс, если вы боретесь с любой из следующих практических проблем.

Практическая задача

Напишите запрос, который подсчитывает количество игроков весом более 300 фунтов для каждого из следующих регионов: Западное побережье (Калифорния, Орегон, Вашингтон), Техас и другие (все остальные).

ПопробуйтеСмотреть ответ

Практическая задача

Напишите запрос, вычисляющий общий вес всех игроков низшего класса (FR/SO) в Калифорнии, а также общий вес всех игроков высшего класса (JR/SR) в Калифорнии.

Попробуйте См. ответ

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

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

 ВЫБЕРИТЕ РЕГИСТР, КОГДА год = 'FR', ТОГДА 'FR'
            КОГДА год = «ТАК», ТОГДА «ТАК»
            КОГДА год = 'JR', ТОГДА 'JR'
            КОГДА год = 'SR', ТОГДА 'SR'
            ELSE 'Нет данных за год' END AS year_group,
            COUNT(1) КАК считать
  ОТ benn.college_football_players
 СГРУППИРОВАТЬ ПО 1
 

И переориентировать его по горизонтали:

 SELECT COUNT(CASE WHEN year = 'FR' THEN 1 ELSE NULL END) AS fr_count,
COUNT(CASE WHEN year = 'SO' THEN 1 ELSE NULL END) AS so_count,
COUNT(CASE WHEN year = 'JR' THEN 1 ELSE NULL END) КАК jr_count,
COUNT (СЛУЧАЙ, КОГДА год = 'SR' THEN 1 ELSE NULL END) КАК sr_count
ОТ benn.