基础的东西长久不用太容易丢了,或者是自己理解不深刻。。。
就是一个题目,一张分数表,有学号,课程号,分数,求每门课程分数最大的学生学号。
表: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查询中,`ORDER BY`、`GROUP BY` 和 `HAVING` 是三个非常重要的子句,它们分别用于不同的数据处理操作。 1. **ORDER BY** 子句: - `ORDER BY` 用于对查询结果进行排序,按照指定的字段进行升序或降序排列。...
3. `HAVING`:`HAVING`子句用于在`GROUP BY`后对已分组的数据进行过滤,类似于`WHERE`子句,但`WHERE`是在数据分组前过滤,而`HAVING`是在分组后过滤。这意味着`HAVING`可以基于聚合函数的结果设置条件,而`WHERE`则...
在SQL查询中,`WHERE`、`GROUP BY`和`HAVING`子句都是用于数据筛选和分组的重要部分,但它们各自承担不同的任务。理解它们的用法对于编写有效的SQL查询至关重要。 首先,`WHERE`子句是SQL查询中最基本的过滤条件,...
特别是在WHERE、GROUP BY、HAVING、ORDER BY同时出现时,执行顺序和编写顺序变得尤为重要。本文将详细介绍WHERE、GROUP BY、HAVING、ORDER BY的执行顺序和编写顺序,以及它们之间的关系。 一、WHERE子句的执行顺序 ...
在SQL查询中,GROUP BY和HAVING子句是数据分析和聚合操作的核心部分,它们帮助我们对数据进行分组和过滤,以获得更有意义的结果。在深入理解这两个子句之前,我们首先需要了解聚合函数,如SUM、COUNT、MAX和AVG等。 ...
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
- `WHERE`子句先于`GROUP BY`和`HAVING`子句执行。 - `GROUP BY`子句执行后,`HAVING`子句才会执行。 #### 实际应用案例 假设我们有一个包含不同区域的人口统计数据的表`tablename`,并且我们想找出所有人口总数...
在MySQL数据库中,`GROUP BY` 和 `HAVING` 是两个非常重要的SQL子句,它们在数据分析和报表生成中扮演着关键角色。`GROUP BY` 用于将数据按照指定的一个或多个列进行分组,而 `HAVING` 则用于在分组后对这些分组进行...
- **HAVING子句**:`HAVING`子句用于过滤`GROUP BY`子句生成的汇总结果。它类似于`WHERE`子句,但是作用于汇总后的结果。 ```sql SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING ...
例如,`SELECT reportsto as manager, count(*) as reports from employees group by reportsto having count(*) > 4`,这条语句首先根据`reportsto`字段对员工进行分组,然后使用`HAVING`筛选出下属数量大于4的经理...
### SQL中的ORDER BY, GROUP BY, HAVING 的用法区别详解 #### 一、概述 在SQL查询语言中,`ORDER BY`, `GROUP BY`, 和 `HAVING` 是三个非常重要的概念,它们分别用于对查询结果进行排序、分组以及在分组后进一步...
这里首先通过`WHERE`子句排除部门10,再通过`GROUP BY`对剩余部门进行分组,并使用`HAVING`子句进一步筛选出工资总和超过8000的部门。 #### 7. 总结 通过以上分析可以看出,`WHERE`和`HAVING`子句虽然都用于过滤...
在MySQL中,`GROUP BY` 和 `HAVING` 通常一起用于聚合查询,用来筛选满足特定条件的分组。然而,当没有 `GROUP BY` 子句时,直接使用 `HAVING` 可能会导致非预期的行为。这个问题的探讨主要集中在 `HAVING` 后面直接...
接下来,`HAVING`子句是用来在分组后对组进行过滤的,它与`WHERE`子句类似,但`WHERE`子句在分组之前就应用于原始数据,而`HAVING`则在`GROUP BY`之后应用,即在聚合函数计算完成之后。这意味着`HAVING`可以基于聚合...
4. 在 SELECT 语句的标准格式中,WHERE 子句先于 GROUP BY,GROUP BY 先于 HAVING,最后是 ORDER BY。 了解并熟练运用这三个子句,对于编写高效、准确的 SQL 查询至关重要,能够帮助我们从海量数据中提取出有价值的...
3. **排序顺序**:当同时使用`GROUP BY`、`HAVING`和`ORDER BY`时,`ORDER BY`通常放在最后。在示例中,`ORDER BY p.name`确保结果按供应商名字排序,而Oracle会默认按照`GROUP BY`中的列顺序进行排序,即先按年份、...
- `WHERE`子句在`GROUP BY`之前运行,用于过滤不满足条件的行,它不能包含聚合函数。 - `HAVING`子句在`GROUP BY`之后运行,允许你基于聚合函数的结果过滤分组。例如,如果你只想看总订单金额超过1700的客户,可以...