美文网首页
查询group

查询group

作者: 路人爱早茶 | 来源:发表于2019-07-24 11:21 被阅读0次

总结:

1.只有group一个组,仅会拿出一条数据
2.有group两个组,会拿出两个组都不重复的数据:a学生有四门不同课,就会按着多的来
3.order:order by student,score就是按着每个学生的score来分,单独score就是全局的分
4.having:having是按组分,where是全局
5.GROUP BY `student`
HAVING AVG(`score`) >= 60
ORDER BY `avg_score` DESC;每个学生所有课均分
6.WHERE `class` <> 'History'不要历史课

Group By有什么用
我们使用几个简单的例子看一下group by的作用:

SELECT * FROM `courses` GROUP BY `class`;
执行的结果是: image.png

我们甚至可以对多个字段进行group by:

SELECT * FROM `courses` GROUP BY `class`,`student`; 
image.png

这样的结果可能会使人困惑,我们以第一个sql为例,解释下sql执行的过程:

image.png

该sql首先会按照class进行分组得到四张中间表,然后输出的时候将每一个分组的第一个记录组合在一起形成了最终的结果。我们还可以发现,最终的记录是按照class进行排序的。这样的顺序并不可靠,具体形成的原因恐怕需要在Mysql的底层原理中找到答案。
Group By还能怎么用
与order by结合在一起使用
我们需要学生的成绩表,且每个学生每科的成绩按照由大到小的顺序排列

我们可以很自然的写出下面的sql:

SELECT * FROM `courses` GROUP BY `student`,`class` ORDER BY `score` DESC;
image.png

通过观察,我们可以发现,事实上,这个sql是将所有的记录按照score由大到小的顺序排列了,为什么会出现这样的结果呢?
事实上,这个取决于整个sql的执行顺序,真正的执行顺序是 from ... where ... group by ... order by ... select,order by 作用在整个记录,而不是每个分组上。
那么,怎么样能够得到我们期望的结果呢?这里给出我的sql实现:

SELECT * FROM `courses` GROUP BY `student`,`class` ORDER BY `student`,`score` DESC;

执行的结果是:


image.png

与having结合在一起使用
我们需要得到所有功课平均分达到60分的同学和他们的均分:

SELECT `student`, AVG(`score`) AS`avg_score`
FROM `courses`
GROUP BY `student`
HAVING AVG(`score`) >= 60
ORDER BY `avg_score` DESC;

执行的结果为:


image.png

假设我们这里需要得到所有功课(除历史课)平均分达到60分的同学和他们的均分:

SELECT `student`, AVG(`score`) AS `avg_score`
FROM `courses`
WHERE `class` <> 'History'
GROUP BY `student`
HAVING AVG(`score`) >= 60
ORDER BY `avg_score` DESC;

执行的结果如下:


image.png

Group By与Limit
我们需要列出均分最高的三门课:

SELECT `class`, AVG(`score`) AS `avg_score`
FROM `courses`
GROUP By `class`
ORDER BY `avg_score` DESC
LIMIT 3;

执行的结果如下:


image.png

相关文章

  • sql 查询语句的基本使用

    group by 分组查询

  • 查询group

    总结: Group By有什么用我们使用几个简单的例子看一下group by的作用: 我们甚至可以对多个字段进行g...

  • 分组查询与分页查询

    同时查询多条记录 分组查询(group by) 如果一个查询语句使用了group by ,则后面的条件需要使用ha...

  • mysql-查询2

    分组查询 group by group by 属性名 [having 条件表达式][ with rollup] “...

  • Hive高级查询

    Hive高级查询 查询操作group by、Order by 、Join 、distribute by 、Sort...

  • mysql单表查询与多表查询

    单表查询 where group by having distinct order by limit 多表查询 子...

  • SQL分组查询

    一.分组查询 1.使用group by进行分组查询 在使用group by关键字时,在select列表中可以指定的...

  • druid查询流程

    GroupBy查询 group by是druid的核心查询。 从broker到historical的查询 历史节点...

  • MongoDB聚合aggregate

    数据准备 $group 查询每个职位的总工资:db.emps.aggregate([{"$group":{_id:...

  • sql语句优化

    max(字段)在字段上要建立索引 子查询改写成联表查询 group by 在group by字段建立索引后先进行分...

网友评论

      本文标题:查询group

      本文链接:https://www.haomeiwen.com/subject/ntntrctx.html