有如下表结构,其中,NAME字段代表“姓名”,SCORE字段代表“分数”。
CREATE TABLE `T1` ( `ID` DOUBLE, `NAME` VARCHAR(300), `SCORE` DOUBLE);INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('1','N1','59');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('2','N2','66');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('3','N3','78');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('4','N1','48');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('5','N3','85');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('6','N5','51');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('7','N4','98');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('8','N5','53');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('9','N2','67');INSERT INTO `T1` (`ID`, `NAME`, `SCORE`) VALUES('10','N4','88'); |
1、查询单分数最高的人和单分数最低的人。
2、查询两门分数加起来的第2至5名。
3、查询两门总分数在150分以下的人。
4、查询两门平均分数介于60和80的人。
5、查询总分大于150分,平均分小于90分的人数。
6、查询总分大于150分,平均分小于90分的人数有几个。
1、查询单分数最高的人和单分数最低的人。
mysql> SELECT * FROM T1 WHERE SCORE IN (SELECT MAX(SCORE) FROM T1 UNION ALL SELECT MIN(SCORE) FROM T1);+------+------+-------+| id | name | score |+------+------+-------+| 4 | n1 | 48 || 7 | n4 | 98 |+------+------+-------+2 rows in set (0.03 sec) |
2、查询两门分数加起来的第2至5名。
mysql> SELECT NAME,SUM(SCORE) FROM T1 GROUP BY NAME ORDER BY SUM(SCORE) DESC LIMIT 1,4;+------+------------+ | name | sum(score) | +------+------------+ | n3 | 163 | | n2 | 133 | | n1 | 107 | | n5 | 104 | +------+------------+ |
3、查询两门总分数在150分以下的人。
mysql> SELECT NAME, SUM(SCORE) FROM T1 GROUP BY NAME HAVING SUM(SCORE) < 150;+------+------------+| name | sum(score) |+------+------------+| n1 | 107 || n2 | 133 || n5 | 104 |+------+------------+3 rows in set (0.00 sec) |
4、查询两门平均分数介于60和80的人。
mysql> SELECT NAME,AVG(SCORE) FROM T1 GROUP BY NAME HAVING AVG(SCORE) BETWEEN 60 AND 80;+------+------------+| name | avg(score) |+------+------------+| n2 | 66.5 |+------+------------+1 row in set (0.02 sec) |
5、查询总分大于150分,平均分小于90分的人数。
mysql> SELECT NAME,SUM(SCORE),AVG(SCORE) FROM T1 GROUP BY NAME HAVING SUM(SCORE)>150 AND AVG(SCORE)<90;+------+------------+------------+ | name | sum(score) | avg(score) | +------+------------+------------+ | n3 | 163 | 81.5 | +------+------------+------------+ 1 row in set (0.00 sec) |
6、查询总分大于150分,平均分小于90分的人数有几个。
mysql> SELECT COUNT(NAME) FROM T1 GROUP BY NAME HAVING SUM(SCORE) > 150 AND AVG(SCORE) < 90;+----------------------+| count(distinct name) |+----------------------+| 1 |+----------------------+1 row in set (0.04 sec) |
|
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 文章内容来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。