mysql交叉查询
时间: 2023-06-22 09:22:25 浏览: 40
交叉查询,也称为交叉表查询或者透视表查询,是指在MySQL中对两个或多个表进行联合查询,并将查询结果以交叉表的形式展示出来的操作。
下面是一个简单的例子,假设我们有两个表:学生表和课程表,它们的结构如下:
学生表(students):
| id | name |
|----|-------|
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
课程表(courses):
| id | course | score |
|----|------------|-------|
| 1 | Math | 90 |
| 1 | English | 85 |
| 2 | Math | 80 |
| 2 | Physics | 95 |
| 3 | Chemistry | 70 |
| 3 | Geography | 75 |
现在我们想要得到每个学生的成绩情况,可以使用如下的交叉查询语句:
```
SELECT students.name,
SUM(CASE WHEN courses.course = 'Math' THEN courses.score ELSE 0 END) AS Math,
SUM(CASE WHEN courses.course = 'English' THEN courses.score ELSE 0 END) AS English,
SUM(CASE WHEN courses.course = 'Physics' THEN courses.score ELSE 0 END) AS Physics,
SUM(CASE WHEN courses.course = 'Chemistry' THEN courses.score ELSE 0 END) AS Chemistry,
SUM(CASE WHEN courses.course = 'Geography' THEN courses.score ELSE 0 END) AS Geography
FROM students
LEFT JOIN courses ON students.id = courses.id
GROUP BY students.name;
```
这条语句的作用是将学生表和课程表进行左连接,然后使用CASE WHEN语句对每个学生的成绩情况进行统计,并以学生名字为分组条件进行聚合。最终的查询结果如下:
| name | Math | English | Physics | Chemistry | Geography |
|-------|------|---------|---------|-----------|-----------|
| Alice | 90 | 85 | 0 | 0 | 0 |
| Bob | 80 | 0 | 95 | 0 | 0 |
| Carol | 0 | 0 | 0 | 70 | 75 |
以上就是一个简单的MySQL交叉查询的例子,希望对你有所帮助。