mysql笔试题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面试笔试常考的mysql 数据库操作group by

分类:数据库2014-08-06 16:38 773人阅读评论(0) 收藏举报面试数据库mysql

IT 面试中,数据库的相关问题基本上属于必考问题,而其中关于sql 语句也是经常考察的一个重要知识点。

下面介绍下sql语句中一个比较重要的操作group by,他的重要行一方面体现在他的理解困难度,一方面体现应用中的长见性。

首先,给出一个studnet学生表:

[sql]view plaincopyprint?

1.CREATE TABLE `student` (

2. `id` int(11) NOT NULL AUTO_INCREMENT,

3. `name` varchar(30) DEFAULT NULL,

4. `sex` tinyint(1) DEFAULT'0',

5. `score` int(10) NOT NULL,

6. `dept` varchar(10) DEFAULT NULL,

7.PRIMARY KEY (`id`)

8.) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

添加一些测试数据:

[sql]view plaincopyprint?

1.mysql> select * from student where id<10;

2.+----+------+------+-------+---------+

3.| id | name | sex | score | dept |

4.+----+------+------+-------+---------+

5.| 1 | a | 1 | 90 | dev |

6.| 2 | b | 1 | 90 | dev |

7.| 3 | b | 0 | 88 | design |

8.| 4 | c | 0 | 60 | sales |

9.| 5 | c | 0 | 89 | sales |

10.| 6 | d | 1 | 100 | product |

11.+----+------+------+-------+---------+

给出需求,写出sql:

给出各个部门最高学生的分数。

要想得到各个部门学生,首先就要分组,按照部门把他们分组,然后在各个部门中找到分数最高的就可以了。

所以sql语句为:

[sql]view plaincopyprint?

1.mysql> select *, max(score) as max from student group by dept order by name

;

2.+----+------+------+-------+---------+------+

3.| id | name | sex | score | dept | max |

4.+----+------+------+-------+---------+------+

5.| 1 | a | 1 | 90 | dev | 90 |

6.| 3 | b | 0 | 88 | design | 88 |

7.| 4 | c | 0 | 60 | sales | 89 |

8.| 6 | d | 1 | 100 | product | 100 |

9.+----+------+------+-------+---------+------+

10. 4 rows in set (0.00 sec)

这只是个简单的例子,我们可以再把这个例子复杂化,比如分数最高的必须是女生,即sex列值必须为1才挑选出,这时的sql语句应该为:

[sql]view plaincopyprint?

1.mysql> select *,max(score) as max from student group by dept having sex='1'

order by name;

2.+----+------+------+-------+---------+------+

3.| id | name | sex | score | dept | max |

4.+----+------+------+-------+---------+------+

5.| 1 | a | 1 | 90 | dev | 90 |

6.| 6 | d | 1 | 100 | product | 100 |

7.+----+------+------+-------+---------+------+

8. 2 rows in set (0.46 sec)

这里我们没有用where语句而是用了having,这里简单说明一下,因为我们的条件是在分组后进行的,其实分组前挑选出sex='1',然后再按照dept部门分组,也是可行的,这里就要看题目是怎么要求的:

[sql]view plaincopyprint?

1.mysql> select *,max(score) as max from student where sex='1'group by dept o

rder by name;

2.+----+------+------+-------+---------+------+

3.| id | name | sex | score | dept | max |

4.+----+------+------+-------+---------+------+

5.| 1 | a | 1 | 90 | dev | 90 |

6.| 6 | d | 1 | 100 | product | 100 |

7.+----+------+------+-------+---------+------+

8. 2 rows in set (0.05 sec)

查询出的结果时一致的,如果把选择条件改为必须部门所有人的分数之和大于150才能把分数最高的部门的人列出来,这里就必须使用

相关文档
最新文档