mysql中使用case when 语句实现多条件查询的方法
时间: 2023-05-10 16:51:05 浏览: 162
MySQL中使用case when 语句实现多条件查询的方法
MySQL 中 Case When 语句可以实现多条件查询的功能,比如可以根据不同的条件对查询结果进行分类,根据分类结果对数据进行汇总、计数或统计等操作。
Case When 语句的基本语法如下:
```
select
case [when condition1 then result1]
[when condition2 then result2]
[when condition3 then result3]
...
[else default_result]
end
from table_name;
```
其中,when 后的条件可以是表达式、逻辑运算符、比较运算符等,如果 condition1 结果为 true,就返回 result1,否则继续判断 condition2,以此类推。
比如,如果有这样一张用户表,其中包含了用户的姓名、性别、年龄、所在城市等信息:
```
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender ENUM('male', 'female') NOT NULL,
age INT NOT NULL,
city VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO users (name, gender, age, city) VALUES
('Tom', 'male', 26, 'Beijing'),
('Lily', 'female', 23, 'Shanghai'),
('Mary', 'female', 32, 'Shenzhen'),
('Jack', 'male', 38, 'Guangzhou'),
('Lucy', 'female', 24, 'Hangzhou'),
('David', 'male', 29, 'Shanghai'),
('Emma', 'female', 27, 'Beijing'),
('Mike', 'male', 31, 'Guangzhou'),
('Ella', 'female', 28, 'Shenzhen'),
('John', 'male', 36, 'Hangzhou');
```
我们可以使用 Case When 语句对用户数据进行分类,比如按照性别进行分类:
```
SELECT
gender,
COUNT(*) AS count
FROM
users
GROUP BY
gender
ORDER BY
CASE
WHEN gender='male' THEN 1
WHEN gender='female' THEN 2
ELSE 3
END;
-- 输出结果如下:
-- gender count
-- male 4
-- female 6
```
这里用 Case When 语句对性别进行分类,count 统计每种分类的数量,同时使用 order by 指定分类的顺序。
除了精确匹配外,Case When 语句还可以使用 like 或 in 等条件表达式进行模糊匹配,比如按照年龄段进行分类:
```
SELECT
CASE
WHEN age < 20 THEN '少年'
WHEN age BETWEEN 20 AND 30 THEN '青年'
WHEN age BETWEEN 30 AND 40 THEN '中年'
ELSE '老年'
END AS age_group,
COUNT(*) AS count
FROM
users
GROUP BY
age_group;
-- 输出结果如下:
-- age_group count
-- 青年 4
-- 中年 3
-- 老年 3
```
这里将用户按照年龄段进行分类,count 统计每种分类的数量,同时使用 as 将分类结果命名为 age_group。
Case When 语句可以灵活地使用在各种查询场景中,比如我们可以根据不同的条件返回不同的文本、数值或日期格式,也可以从多个字段中派生出新的字段等。需要注意的是,Case When 语句也需要谨慎使用,因为过多的分支会降低查询性能,建议根据实际需求进行调整。
阅读全文