基础的东西长久不用太容易丢了,或者是自己理解不深刻。。。
就是一个题目,一张分数表,有学号,课程号,分数,求每门课程分数最大的学生学号。
表:score(stu_id varchar2(10), course_id varchar2(20), score number)
sql:
select s.stu_id, s.course_id,s.score
from (select course_id, max(score) as score from score group by course_id) t, score s
where t.course_id = s.course_id and t.score = s.score;
1)先要分组,查出每门课程的最大分数和课程号。
2)再复合查询,拼接条件查出学号。
又有一张表student(id number, name varchar2(20))同时还要查出姓名:
select s.stu_id, st.name, s.course_id,s.score
from (select course_id, max(score) as score from score group by course_id) t, score s, student st
where t.course_id = s.course_id and t.score = s.score and st.id = s.stu_id;
或者
select * from ( select s.stu_id, s.course_id,s.score
from (select course_id, max(score) as score from score group by course_id) t, score s
where t.course_id = s.course_id and t.score = s.score) stt left join student st on st.id = stt.stu_id;
刚开始看到这个死活是没搞出来,悲哀。。
----------------------------
说到group by, select 后面的字段只能是聚集函数或group by后面出现的字段,其他字段带上的结果都不正确,但不会报错。
可以在group by之前用where先把不符合条件的记录排除掉,也可以在group by之后用having来过滤结果,having后面只能针对分组使用聚集函数。
where执行的优先级在聚合函数之前。
分享到:
相关推荐
主要介绍了sql中的 where 、group by 和 having 用法解析,需要的朋友可以参考下
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序
GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中。分组查询后,查询结果为一个或多个列分组后的结果集。 GROUP BY语法 SELECT 列名, ...
02.hive查询语法--分组聚合--groupby查询--where过滤和having过滤的区别.mp4
一,如果一个查询中使用了分组函数,任何不在分组函数中的列或表达式必须要在group by中... select job,avg(sal) from emp having avg(sal)>1500 group by job; 使用having子句时,oracle系统的处理顺序是: 1,首先对
from > where > group by > having > order by 而partition by应用在以上关键字之后,实际上就是在执行完select之后,在所得结果集之上进行partition。 3.partition by相比较于group by,能够在保留全部数据的基础上...
何时使用having where,请遵照下面的说明:WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表 我现在需要取出每个分类... 执行顺序:from… where…group by… having…. select … order by… 所以在order by拿到的结果里已经是
对于初学者来说,一般用学生及其选课等信息这些基本的操作入手。...group by 表示 以······分组, 查询表中被选人数少于3的课程及人数: having 后跟附加条件, 4、其他聚集函数的应用: 最大值max()、最
2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点...
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。 语法 下面是 HAVING 子句在 SELECT 查询中的位置: SELECT FROM WHERE GROUP BY HAVING ORDER BY HAVING 子句必须放置于 ...
元旦节,干点啥呢,小编给大家分享Group by和Having子句的小例子,具体详情如下所示: 表结构: 要求: 查询有多个员工的工资不低于2000的部门编号(就是说如果一个部门的员工大于2000的人数有两个或两个以上就...
当我们刚开始学Oracle时,见到group by,常常会来个三连问:为什么要用group by?group by应该怎么用?为什么写了group by运行时会提示“不是单组分组函数;...by语句一般放在where语句的后面,若有having子句,则放
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 SELECT SUM(population) FROM ...
mysql group by用法:文章以图文并茂的方式详细介绍了mysql group by用法,包含语法和sql的使用、与where子句连用、与having子句连用等方式。
“Where” 是一个约束声明,使用Where来... 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。 Transact-SQL编程语言提供下列聚合函数: 1.AVG 返回指定组中的平均值,空值被忽略。 例:select prd_no,avg(qty) f
代码如下: SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region 先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中 的不同字段(一或多条记录)作...