`
足至迹留
  • 浏览: 496961 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

group by, having, where

 
阅读更多
基础的东西长久不用太容易丢了,或者是自己理解不深刻。。。
就是一个题目,一张分数表,有学号,课程号,分数,求每门课程分数最大的学生学号。
表: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执行的优先级在聚合函数之前。
分享到:
评论

相关推荐

    order by 、group by 、having的用法

    在SQL查询中,`ORDER BY`、`GROUP BY` 和 `HAVING` 是三个非常重要的子句,它们分别用于不同的数据处理操作。 1. **ORDER BY** 子句: - `ORDER BY` 用于对查询结果进行排序,按照指定的字段进行升序或降序排列。...

    order_by_、group_by_、having的用法

    3. `HAVING`:`HAVING`子句用于在`GROUP BY`后对已分组的数据进行过滤,类似于`WHERE`子句,但`WHERE`是在数据分组前过滤,而`HAVING`是在分组后过滤。这意味着`HAVING`可以基于聚合函数的结果设置条件,而`WHERE`则...

    sql中的 where 、group by 和 having 用法解析

    在SQL查询中,`WHERE`、`GROUP BY`和`HAVING`子句都是用于数据筛选和分组的重要部分,但它们各自承担不同的任务。理解它们的用法对于编写有效的SQL查询至关重要。 首先,`WHERE`子句是SQL查询中最基本的过滤条件,...

    数据库笔试题之查询语句where,group by,having,order by执行与编写顺序详解

    特别是在WHERE、GROUP BY、HAVING、ORDER BY同时出现时,执行顺序和编写顺序变得尤为重要。本文将详细介绍WHERE、GROUP BY、HAVING、ORDER BY的执行顺序和编写顺序,以及它们之间的关系。 一、WHERE子句的执行顺序 ...

    SQL问题详解之_having_Group by

    在SQL查询中,GROUP BY和HAVING子句是数据分析和聚合操作的核心部分,它们帮助我们对数据进行分组和过滤,以获得更有意义的结果。在深入理解这两个子句之前,我们首先需要了解聚合函数,如SUM、COUNT、MAX和AVG等。 ...

    当数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序

    当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法

    where和having区别

    - `WHERE`子句先于`GROUP BY`和`HAVING`子句执行。 - `GROUP BY`子句执行后,`HAVING`子句才会执行。 #### 实际应用案例 假设我们有一个包含不同区域的人口统计数据的表`tablename`,并且我们想找出所有人口总数...

    mysql group by having 实例代码

    在MySQL数据库中,`GROUP BY` 和 `HAVING` 是两个非常重要的SQL子句,它们在数据分析和报表生成中扮演着关键角色。`GROUP BY` 用于将数据按照指定的一个或多个列进行分组,而 `HAVING` 则用于在分组后对这些分组进行...

    on与where、group by的用法

    - **HAVING子句**:`HAVING`子句用于过滤`GROUP BY`子句生成的汇总结果。它类似于`WHERE`子句,但是作用于汇总后的结果。 ```sql SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING ...

    sql中where和having 区别

    例如,`SELECT reportsto as manager, count(*) as reports from employees group by reportsto having count(*) > 4`,这条语句首先根据`reportsto`字段对员工进行分组,然后使用`HAVING`筛选出下属数量大于4的经理...

    order_by_、group_by_、having的用法区别.doc

    ### SQL中的ORDER BY, GROUP BY, HAVING 的用法区别详解 #### 一、概述 在SQL查询语言中,`ORDER BY`, `GROUP BY`, 和 `HAVING` 是三个非常重要的概念,它们分别用于对查询结果进行排序、分组以及在分组后进一步...

    where和having的区别

    这里首先通过`WHERE`子句排除部门10,再通过`GROUP BY`对剩余部门进行分组,并使用`HAVING`子句进一步筛选出工资总和超过8000的部门。 #### 7. 总结 通过以上分析可以看出,`WHERE`和`HAVING`子句虽然都用于过滤...

    MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究

    在MySQL中,`GROUP BY` 和 `HAVING` 通常一起用于聚合查询,用来筛选满足特定条件的分组。然而,当没有 `GROUP BY` 子句时,直接使用 `HAVING` 可能会导致非预期的行为。这个问题的探讨主要集中在 `HAVING` 后面直接...

    基于TP框架SQL之where与having区别

    - 作用:在对查询结果进行分组(GROUP BY)前,根据指定条件筛选记录,即在分组之前过滤数据。 - 特点:条件中不能包含聚合函数,因为此时数据尚未经过分组,聚合函数无法计算出有意义的结果。 - 示例用途:显示...

    深入浅析SQL中的group by 和 having 用法

    接下来,`HAVING`子句是用来在分组后对组进行过滤的,它与`WHERE`子句类似,但`WHERE`子句在分组之前就应用于原始数据,而`HAVING`则在`GROUP BY`之后应用,即在聚合函数计算完成之后。这意味着`HAVING`可以基于聚合...

    Mysql中order by、group by、having的区别深入分析

    4. 在 SELECT 语句的标准格式中,WHERE 子句先于 GROUP BY,GROUP BY 先于 HAVING,最后是 ORDER BY。 了解并熟练运用这三个子句,对于编写高效、准确的 SQL 查询至关重要,能够帮助我们从海量数据中提取出有价值的...

    group by的详解

    3. **排序顺序**:当同时使用`GROUP BY`、`HAVING`和`ORDER BY`时,`ORDER BY`通常放在最后。在示例中,`ORDER BY p.name`确保结果按供应商名字排序,而Oracle会默认按照`GROUP BY`中的列顺序进行排序,即先按年份、...

Global site tag (gtag.js) - Google Analytics