MySQL交叉表

在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义。
http://topic.csdn.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?96198
现整理解法如下:

数据样本:

create table tx(
 id int primary key,
 c1 char(2),
 c2 char(2),
 c3 int
);

 

insert into tx values
(1 ,'A1','B1',9),
(2 ,'A2','B1',7),
(3 ,'A3','B1',4),
(4 ,'A4','B1',2),
(5 ,'A1','B2',2),
(6 ,'A2','B2',9),
(7 ,'A3','B2',8),
(8 ,'A4','B2',5),
(9 ,'A1','B3',1),
(10 ,'A2','B3',8),
(11 ,'A3','B3',8),
(12 ,'A4','B3',6),
(13 ,'A1','B4',8),
(14 ,'A2','B4',2),
(15 ,'A3','B4',6),
(16 ,'A4','B4',9),
(17 ,'A1','B4',3),
(18 ,'A2','B4',5),
(19 ,'A3','B4',2),
(20 ,'A4','B4',5);

 

mysql> select * from tx;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 | A1   | B1   |    9 |
|  2 | A2   | B1   |    7 |
|  3 | A3   | B1   |    4 |
|  4 |

  • 6
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
交叉查询,也称为交叉查询或者透视查询,是指在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交叉查询的例子,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值