función de juicio de condición de mysql

Para construir la tabla a sqlcontinuació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 WHENEn la declaración se puede SQLentretejer en la declaración lógica de determinación, similar a Javala if elsedeclaració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 scorela tabla, sex = 1para hombre, sex = 0para 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

Inserte la descripción de la imagen aquí

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: scoremayor o igual 90al sobresaliente, 80~90así 60~80como aprobar, menor que 60reprobar, con una SQLdeclaració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

Inserte la descripción de la imagen aquí

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 scorela 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

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí
Como se puede ver, en algunos escenarios, IFfunciones y CASE WHENhay el mismo efecto, IFla función es relativamente simple y CASE WHENpuede hacer frente a una decisión más compleja. Además, las IFfunciones 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

Inserte la descripción de la imagen aquí

IF NULL Juicio condicional

Esperamos SQLhacer algún procesamiento, si el resultado de la consulta NULL, se convierte a un valor específico, que usa mysqlla IF NULLfunción

SQLGeneralmente escrito así

SELECT price FROM goods WHERE name = 'light'

Usar la IF NULLnueva redacción de funciones

SELECT IFNULL(price, 0) price FROM goods WHERE name = 'light'

Pero el uso de IF NULLla declaración, si la wherecondición del namevalor no existe, devolveráNULL

IF NULL Funciones combinadas con funciones agregadas

-- 返回结果:0
SELECT IFNULL(SUM(price), 0) FROM goods WHERE status = 3

Otros AVG、COUNTcomo tratado de la misma manera, e independientemente de wherela presencia de la ausencia, el resultado se devuelve 0a

Supongo que te gusta

Origin blog.csdn.net/weixin_38192427/article/details/115190457
Recomendado
Clasificación