Освойте использование падежа...когда через три минуты

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

«Это 12-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".


Напоминание: В этой статье около 1732 слов, и ее чтение займет около 2-3 минут. Надеюсь, вы сможете ее терпеливо прочитать. Если вы уже знакомы с этим пунктом знаний, вы можете сразу перейти к интересующему вас месту. через каталог. Надеюсь прочитать Эта статья может быть полезна для вас. Если у вас есть какие-либо хорошие предложения или мнения в процессе чтения, пожалуйста, оставьте сообщение под статьей или лично мне.Если вы чувствуете, что статья принесла вам небольшую помощь, вы можете помочь лайкнуть и подписаться, спасибо!!

предисловие

   Функция: Вы можете использовать их для оценки функции в базе данных, которая аналогична функции if...else в коде.Однако у них есть различия.Ниже мы поговорим об их конкретных функциях и различиях.

Первый: используйте грамматику

  (1) Функция обычного случая

CASE  <表达式>
   WHEN <值1> THEN <操作>
   WHEN <值2> THEN <操作>
   ...
   ELSE <操作>
END 

  (1) Функция поиска регистра

CASE
    WHEN <条件1> THEN <命令>
    WHEN <条件2> THEN <命令>
    ...
    ELSE commands
END

Функция 1: Объединить групповую статистику

  Требование: Рассчитать общее количество людей по «Континенту» по данным на рисунке ниже

国家人口

  (1) Метод 1: Используйте обычные функции case для статистики

		select (
		case name 
			when '中国' then '亚洲'
			when '日本' then '亚洲'
			when '美国' then '北美洲'
			when '加拿大' then '北美洲'
		else '其他' end
		) 洲,
		sum(population) 总数 
		from t_country
		GROUP BY
		(
		case name 
			when '中国' then '亚洲'
			when '日本' then '亚洲'
			when '美国' then '北美洲'
			when '加拿大' then '北美洲'
		else '其他' end
		)

  Метод 1. Статистические результаты.

按洲统计结果

  (2) Метод 2: Используйте функцию поиска для статистики

	select (
		case  
		when name in('中国','日本') then '亚洲'
		when name in('美国','加拿大') then '北美洲'
		else '其他' end
	) 洲,
	sum(population) 总数 
	from t_country
	GROUP BY
	(
		case  
		when name in('中国','日本') then '亚洲'
		when name in('美国','加拿大') then '北美洲'
		else '其他' end
	)

  Метод 2. Статистические результаты.

搜索case的统计结果

Функция 2: Обновление значений поля по условию

  (1) Требование: Увеличить заработную плату работникам с окладом менее 3000 на 20%, а работникам с окладом более 3000 на 8%. Данные следующие:

源数据

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

update t_salary set salary = salary + (salary * 0.2) where salary < 3000;
update t_salary set salary = salary + (salary * 0.08) where salary >= 3000;

  Однако на самом деле была бы проблема, если бы это было реализовано так, Например: оклад исходной зарплаты 2900 станет 3480 после выполнения первого оператора.В это время будет выполнен второй оператор обновления.Поскольку оклад больше 3000, будут добавлены дополнительные 8%. зарплата, которая явно не соответствует нашим потребностям,Поэтому, если вы хотите выполнить это требование и не хотите писать слишком сложный sql, вы можете выполнить эту функцию через функцию case.

  (2) Используйте искомую функцию case для условной модификации (простую функцию case нельзя использовать здесь, потому что простая функция case не может оценивать условия с диапазоном)

update t_salary
	set 
	salary = 
	(
		case 
		 when salary < 3000 then salary + salary * 0.2
		 when salary >= 3000 then salary + salary * 0.08
		 else salary 
		end
	)

  (3) Результат после изменения подусловий

分条件修改后结果

Функция 3: Проверить, согласованы ли значения полей в таблице

  (1) Требования: Определите, соответствует ли значение поля имени в двух таблицах, и верните результат. Данные следующие:

源数据

  (2) Используйте искомую функцию case для условной модификации (простую функцию case нельзя использовать здесь, потому что простая функция case не может оценивать условия с диапазоном)

select name,
(
	case 
	when desciption in(select description from t_user2) then '一致'
	else '不一致'
	end
) 比较结果
from t_user1

  (3) Результаты сравнения:
字段比较结果


Функция 4: переход от строки к колонке (выделение — обычное для интервью)

  (1) Требования: Отсортируйте данные в таблице по имени, предмету и классу каждого учащегося.Данные выглядят следующим образом:

源数据

  (2) Используйте функцию case для преобразования

// 使用普通case函数
SELECT NAME,
	max( CASE class WHEN '语文' THEN grade ELSE 0 END ) 语文,
	max( CASE class WHEN '数学' THEN grade ELSE 0 END ) 数学,
	max( CASE class WHEN '英语' THEN grade ELSE 0 END ) 英语 
FROM
	t_source 
GROUP BY
NAME

// 使用搜索case函数
SELECT NAME,
	max( CASE  WHEN class = '语文' THEN grade ELSE 0 END ) 语文,
	max( CASE  WHEN class =  '数学' THEN grade ELSE 0 END ) 数学,
	max( CASE  WHEN class = '英语' THEN grade ELSE 0 END ) 英语 
FROM
	t_source 
GROUP BY
NAME

  (3) Результаты преобразования

行转列

Пятое: разница между обычной функцией case и функцией case case

   Как видно из приведенного выше случая, функция общего регистра относительно проста в написании, но функция относительно проста, а функция поиска функции регистра более мощная, а именно:

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

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

Шесть: Резюме

  Если вы хотите потренироваться самостоятельно и вам нужны тестовые данные из этой статьи, вы можете ответить личным сообщением: [Тестовые данные]

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

  Кодировать слова непросто. Если вы считаете, что эта статья немного полезна для вас, вы можете поставить лайк и подписаться!