Estadísticas de mysql según el mes (expresión CASE)

       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.

Supongo que te gusta

Origin blog.csdn.net/cs373616511/article/details/107204033
Recomendado
Clasificación