博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql注意:
阅读量:5457 次
发布时间:2019-06-15

本文共 2152 字,大约阅读时间需要 7 分钟。

本例测试数据表

CREATE TABLE `test_student` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键自增id',`name` varchar(20) NOT NULL DEFAULT '' COMMENT '学生名字',`subject` varchar(10) NOT NULL DEFAULT '' COMMENT '科目',`score` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '成绩',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('1', '张三', '语文', '80');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('2', '张三', '数学', '56');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('3', '张三', '英语', '38');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('4', '李四', '语文', '40');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('5', '李四', '数学', '65');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('6', '李四', '英语', '42');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('7', '王五', '语文', '61');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('8', '王五', '数学', '32');INSERT INTO `cnblog`.`test_student` (`id`, `name`, `subject`, `score`) VALUES ('9', '王五', '英语', '90');

 

1. MySQL中不允许使用where 列别名作为查询条件,是因为MySql中列的别名本来是返回结果的时候才显示的,不在SQL解析时候使用。如果一定要用别名作为查询条件就用having

  例:要查询语文成绩全部及格的学生有哪些?

     如果这里使用别名 写成 

   SELECT name,subject,score as s FROM `test_student` where subject='语文' and s >60;  报错

   正确写法 SELECT name,subject,score as s FROM `test_student` where subject='语文' having s >60;

 

2. 分组查询各科最大成绩时候,直接 max(score)  + group by  求出的最大值未必对应相应的人,因为,group by默认已每组第一个值列出。

   例:要查询各科成绩最高的同学名称、成绩

   如果直接用 SELECT name,subject,max(score) as max FROM `test_student` group by `subject` 可以查出最高成绩,但最高成绩并没有对应相应的人,如下:

  

  实际上数学成绩最高65 的为李四 ,英语成绩最高90 的是王五, 语文成绩最高80的是张三。

  正确写法:SELECT * from `test_student` where score in(SELECT max(score) as max FROM `test_student` group by `subject`);

  

     或者:SELECT t1.* from `test_student` as t1 join (SELECT max(score) as max FROM `test_student` group by `subject`) as t2 on t1.score=t2.max;

  

 

转载于:https://www.cnblogs.com/wgq123/p/6795099.html

你可能感兴趣的文章
leetcode 173-Binary Search Tree Iterator(medium)
查看>>
【移动开发】Android中WIFI开发总结(二)
查看>>
beyond compare 数据对比工具
查看>>
python3链接oracle
查看>>
【NOIP2017】时间复杂度
查看>>
poj 3375 Network Connection
查看>>
C# 获取当前月第一天和最后一天
查看>>
shipin_beanshell_讲解
查看>>
购物小练习
查看>>
朴素贝叶斯应用:垃圾邮件分类
查看>>
vs code 快捷键大全
查看>>
mysql注意:
查看>>
[1,2,3,4,5,6,7,8] 转换成 [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8)] ...
查看>>
彻底删除mysql 分类: database 201...
查看>>
ARM指令集中立即数寻址的范围
查看>>
学习:关于oracle序列(sequence)组成的主键和唯一的字符串组成的主键在性能上如何?...
查看>>
用一道面试题考察对闭包的理解
查看>>
android中判断某个应用是否存在
查看>>
How to change SAPABAP1 schema password In HANA
查看>>
mimics教程中文版——第二章
查看>>