Para construir la tabla a sql
continuación
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`sex` tinyint(255) NOT NULL,
`age` int(11) NOT NULL,
`score` bigint(255) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (1, '龙傲天', 1, 16, 90);
INSERT INTO `score` VALUES (2, '赵日天', 1, 14, 58);
INSERT INTO `score` VALUES (3, '叶良辰', 1, 17, 54);
INSERT INTO `score` VALUES (4, '武媚娘', 0, 22, 72);
INSERT INTO `score` VALUES (5, '甄姬', 0, 36, 78);
INSERT INTO `score` VALUES (6, '徐胜虎', 1, 20, 98);
SET FOREIGN_KEY_CHECKS = 1;
CASE WHEN
Juicio condicional
CASE WHEN
En la declaración se puede SQL
entretejer en la declaración lógica de determinación, similar a Java
la if else
declaración. Se divide en funciones simples y expresiones condicionales.
Función simple
-- 如果字段值等于预期值,则返回结果 1,否则返回结果 2
CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END
Echemos un vistazo al uso específico a través de un ejemplo simple, la tabla score
Descripción de la demanda: en score
la tabla, sex = 1
para hombre, sex = 0
para mujer, convertida en una pantalla de caracteres de consulta
SELECT `name`,
( CASE sex WHEN 0 THEN '女' ELSE '男' END ) AS sex
FROM
score
El resultado es el siguiente
Expresión condicional
-- 如果该判断结果为 true,那么 CASE 语句将返回 '结果1',否则返回 '结果2',如果没有 ELSE,则返回 null
-- CASE 与 END 之间可以有多个 WHEN… THEN… ELSE 语句。END 表示 CASE 语句结束
CASE
WHEN 条件判断 THEN 结果1 ELSE 结果2
END
Echemos un vistazo al uso específico a través de un ejemplo simple, la tabla score
Explicación de la demanda: score
mayor o igual 90
al sobresaliente, 80~90
así 60~80
como aprobar, menor que 60
reprobar, con una SQL
declaración de las estadísticas del nivel de logro de cada estudiante
SELECT NAME, score,
( CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格' ELSE '不及格' END
) AS LEVEL
FROM
score
El resultado es el siguiente
En conjunto con
CASE WHEN
Combinado con funciones agregadas, puede realizar funciones estadísticas más complejas
Echemos un vistazo al uso específico a través de un ejemplo simple, la tabla score
Descripción de la demanda: En score
la tabla, cuente cuántos niños y niñas, así como niños y cuántos han fallado.
SELECT
SUM( CASE WHEN sex = 0 THEN 1 ELSE 0 END ) AS 女生人数,
SUM( CASE WHEN sex = 1 THEN 1 ELSE 0 END ) AS 男生人数,
SUM( CASE WHEN score >= 60 AND sex = 0 THEN 1 ELSE 0 END ) 男生及格人数,
SUM( CASE WHEN score >= 60 AND sex = 1 THEN 1 ELSE 0 END ) 女生及格人数
FROM
score
El resultado es el siguiente
IF
Juicio condicional
-- expr 是一个条件表达式,如果结果为 true,则返回 result_true,否则返回 result_false
IF(expr, result_true, result_false)
Ejemplo de uso
SELECT
`name`,
IF( sex = 1, '男', '女' ) AS sex
FROM
score
El resultado es el siguiente
Como se puede ver, en algunos escenarios, IF
funciones y CASE WHEN
hay el mismo efecto, IF
la función es relativamente simple y CASE WHEN
puede hacer frente a una decisión más compleja. Además, las IF
funciones también se pueden combinar con funciones agregadas
Por ejemplo, consulta cuántos niños y niñas hay en la clase.
SELECT
SUM(IF( sex = 1, 1, NULL )) AS 男生人数,
SUM(IF( sex = 0, 1, NULL )) AS 女生人数
FROM
score
El resultado es el siguiente
IF NULL
Juicio condicional
Esperamos SQL
hacer algún procesamiento, si el resultado de la consulta NULL
, se convierte a un valor específico, que usa mysql
la IF NULL
función
SQL
Generalmente escrito así
SELECT price FROM goods WHERE name = 'light'
Usar la IF NULL
nueva redacción de funciones
SELECT IFNULL(price, 0) price FROM goods WHERE name = 'light'
Pero el uso de IF NULL
la declaración, si la where
condición del name
valor no existe, devolveráNULL
IF NULL
Funciones combinadas con funciones agregadas
-- 返回结果:0
SELECT IFNULL(SUM(price), 0) FROM goods WHERE status = 3
Otros AVG、COUNT
como tratado de la misma manera, e independientemente de where
la presencia de la ausencia, el resultado se devuelve 0
a