La expresión CASE es una tecnología muy importante y conveniente en SQL, debemos aprender a usarla para describir ramas condicionales.
Esta sección
presentará el uso de expresiones CASE a través de preguntas de ejemplo como la conversión de filas y columnas, la reagrupación de datos existentes (clasificación), el uso combinado con restricciones y la ramificación condicional para los resultados de agregación .
Citado de "Tutorial avanzado de SQL"
1. Hoja de datos
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `nameIndex` (`name`),
FULLTEXT KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 |
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (1, 'zhangsan', '2020-06-01 23:23:52', '1');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (2, 'lisi', '2020-06-01 23:23:52', '0');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (3, 'wangwu', '2020-07-01 23:23:52', '0');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (4, 'zhaosi', '2020-05-01 23:23:52', '2');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (5, 'libai', '2020-07-08 13:33:38', '0');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (6, 'bajie', '2020-04-01 13:34:53', '1');
2. Demanda
De acuerdo con la tabla de usuarios a continuación, cuente el número de usuarios creados en los últimos 2 meses. Los usuarios creados en otros meses mostrarán "Otro"
resultados estadísticos
Tres, declaración SQL
1. Cómo escribir una expresión CASE
Expresión
CASE simple CASE sex
WHEN '1' THEN 'Male'
WHEN '0' THEN 'Female'
ELSE 'Other' END
2. Escribe el siguiente sql para las necesidades
SELECT CASE
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-07' THEN '2020-07'
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-06' THEN '2020-06'
ELSE '其他'
END AS month, COUNT(create_time) AS num
FROM demo
GROUP BY CASE
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-07' THEN '2020-07'
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-06' THEN '2020-06'
ELSE '其他'
END
ORDER BY create_time DESC
Nota: Si tiene que mostrar el mes sin datos, puede usar el código para resolverlo y mantener la simplicidad de la instrucción sql.