精华内容
下载资源
问答
  • group by order by区别 + 理解过程

    万次阅读 多人点赞 2018-07-25 12:04:16
    order by group by区别 order by  group by 的区别: 1,order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 2,group by 从...

    order by 和 group by 的区别

    order by 和 group by 的区别:

    1,order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。

    2,group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。

    注意:聚合函数是---sum()、count()、avg()等都是“聚合函数

     

    自己慢慢去理解的过程。。。。

    为什么group by必须要用聚合函数?自己不断在数据库语句写了,摸索了半个小时,,真是愚钝

    数据库表:

    各种语句的测试:

    select product from orders 查询所有product列,包括重复的

     

    select product from orders GROUP BY product:查询结果只输出product不同的元素列,不包括重复的

     

    select product,price from orders 查询所有的product列值,包括重复的。如果两个bb合在一起的话,那么price就查不出来 了,如下:

    group by product 将product 相同的元素聚合在一起,去掉重复列,那么price将没有意义

    只有 聚合在一起的东西才有意义,如聚合在一起的price之和(sum(price))就有意义了,有点感觉了

    select product,sum(price) from orders GROUP BY product :这样才不会报错。

    select product,sum(price) from orders GROUP BY product

    //依照前面的(GROUP BY product)就是按 product分组,那么重复的aa就会聚集在一起,那么如果要继续查找 select product,price 继续查找price的话,price就不存在了。。因为重复的aa聚合在一起了。所以只能用一些聚合函数来玩,sum(price)

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    那么我group by之后还要筛选一下sum(price) >100的product呢?

    一开始我直接这么写的,很正常的思路啊、、

    select product,sum(price) from orders where sum(price) GROUP BY product

     

    然后查了一波资料,才知道where后面不能接聚合函数?????!!!!

    具体原因:https://blog.csdn.net/w2232097312/article/details/52211201

    简短来说是因为:聚合函数是针对结果集进行的,但是where条件并不是在查询出结果集之后运行,所以主函数放在where语句中,会出现错误

    那么只能用另外一种方法:havaing。having就是专门为了应付这种情况而发明出来的。。。

    select product,sum(price) from orders GROUP BY product HAVING sum(price)>100

    换种写法,答案就出来了。。。

    其他 扩展问题。。。

    group by不能跟where一起用吗?

    可以。注意:where肯定在group by 之前。

    一,group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选。

    二,需要注意having和where的用法区别:

           1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。

           2.where肯定在group by 之前。

           3.where后的条件表达式里不允许使用聚合函数,而having可以。

    三,当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

    1.执行where xx对全表数据做筛选,返回第1个结果集。

    2.针对第1个结果集使用group by分组,返回第2个结果集。

    3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。

    4.针对第3个结集执行having xx进行筛选,返回第4个结果集。

    5.针对第4个结果集排序。

    再来个order by这就是理解的过程。。。

    select product,sum(price) from orders GROUP BY product HAVING sum(price)>100 ORDER BY sum(price);

     

    展开全文
  • group byorder by区别

    千次阅读 2020-07-08 14:11:33
    1. order by order by比较简单,作用就是排序 asc 从上到下慢慢升序 ...2. group by order by 我的理解是:聚合分组 聚合的意思就是聚合函数:例如 sum()、avg()、count()等等 直接上个栗子: ...

    1. order by

    order by比较简单,作用就是排序
    asc 从上到下慢慢升序
    desc 从上到下慢慢降序
    默认为升序(就是你sql后面不写order by 它就是升序)
    order by后面跟多个字段时,排序按就近原则依次而来

    2. group by

    group by我的理解是:聚合分组,值相等即为一组

    聚合的意思就是聚合函数:例如 sum()、avg()、count()、max()等等

    直接上个栗子:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    看到这,能明白GROUP BY把重复的元素(三个蛮王)分为了一组。
    所谓对NAME进行GROUP BY,其实就是对NAME进行了分组聚合, 值相等的为一组。
    继续往下走
    在这里插入图片描述
    在这里插入图片描述
    单独查询一个name时,对name进行GROUP BY是🆗的
    但是这里查询中多了一个money字段,再对name进行GROUP BY 就会报错
    继续往下
    在这里插入图片描述
    看到这里,应该就明白:在对NAME字段进行GROUP BY 聚合的条件下,如果还要查询MONEY字段,就应该也用聚合函数对MONEY进行操作,否则这样查出来的MONEY是没有意义的(money前面的name都被分组聚合了,你还要查这一个个单独的money有什么用?誰是誰的誰?)。
    接着往下,如果我在此基础上,还要查询sum(money)大于100的人呢?
    在这里插入图片描述
    会报错,原因是:聚合函数是针对结果集进行的,但是where条件并不是在查询出结果集之后运行,所以主函数放在where语句中,会出现错误。
    归根结底就一句话:聚合函数操作的是已查出的数据,where后面是查询条件,数据还没有,又怎么能当条件放到where里?
    解决方法:having关键字
    在这里插入图片描述

    注意:
    1.having只能用在group by之后,对分组后的结果进行筛选(即:要使用having,你必须先用group by分组)。
    2.如果还要使用where,那么where要放在group by 之前
    3.where后的条件表达式里不允许使用聚合函数,但having可以

    再来个大总结:
    首先 ,是这样的:
    在这里插入图片描述
    接着,是这样的:
    在这里插入图片描述
    最后,是这样的:
    在这里插入图片描述
    :下面是另一个sql例子,看不看无所谓,大家可以无视。

    CREATE TABLE `comment` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(10) unsigned NOT NULL,
      `content` varchar(200) NOT NULL,
      `addtime` datetime NOT NULL,
      `lastmodify` datetime NOT NULL,
      PRIMARY KEY (`id`),
      KEY `user_id` (`user_id`),
      KEY `addtime` (`addtime`),
      KEY `uid_addtime` (`user_id`,`addtime`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `comment` (`id`, `user_id`, `content`, `addtime`, `lastmodify`) VALUES
    (1, 1, '评论1', '2017-05-17 00:00:00', '2017-05-17 00:00:00'),
    (2, 1, '评论2', '2017-05-17 00:00:01', '2017-05-17 00:00:01'),
    (3, 2, '评论1', '2017-05-17 00:00:02', '2017-05-17 00:00:02'),
    (4, 2, '评论2', '2017-05-17 00:00:03', '2017-05-17 00:00:03'),
    (5, 3, '评论1', '2017-05-17 00:00:04', '2017-05-17 00:00:04'),
    (6, 1, '评论3', '2017-05-17 00:00:05', '2017-05-17 00:00:05'),
    (7, 4, '评论1', '2017-05-17 00:00:06', '2017-05-17 00:00:06'),
    (8, 4, '评论2', '2017-05-17 00:00:07', '2017-05-17 00:00:07'),
    (9, 4, '评论3', '2017-05-17 00:00:08', '2017-05-17 00:00:08'),
    (10, 4, '评论4', '2017-05-17 00:00:09', '2017-05-17 00:00:09'),
    (11, 3, '评论2', '2017-05-17 00:00:10', '2017-05-17 00:00:10');
    
    select * from comment;
    +----+---------+---------+---------------------+---------------------+
    | id | user_id | content | addtime             | lastmodify          |
    +----+---------+---------+---------------------+---------------------+
    |  1 |       1 | 评论1   | 2017-05-17 00:00:00 | 2017-05-17 00:00:00 |
    |  2 |       1 | 评论2   | 2017-05-17 00:00:01 | 2017-05-17 00:00:01 |
    |  3 |       2 | 评论1   | 2017-05-17 00:00:02 | 2017-05-17 00:00:02 |
    |  4 |       2 | 评论2   | 2017-05-17 00:00:03 | 2017-05-17 00:00:03 |
    |  5 |       3 | 评论1   | 2017-05-17 00:00:04 | 2017-05-17 00:00:04 |
    |  6 |       1 | 评论3   | 2017-05-17 00:00:05 | 2017-05-17 00:00:05 |
    |  7 |       4 | 评论1   | 2017-05-17 00:00:06 | 2017-05-17 00:00:06 |
    |  8 |       4 | 评论2   | 2017-05-17 00:00:07 | 2017-05-17 00:00:07 |
    |  9 |       4 | 评论3   | 2017-05-17 00:00:08 | 2017-05-17 00:00:08 |
    | 10 |       4 | 评论4   | 2017-05-17 00:00:09 | 2017-05-17 00:00:09 |
    | 11 |       3 | 评论2   | 2017-05-17 00:00:10 | 2017-05-17 00:00:10 |
    +----+---------+---------+---------------------+---------------------+
    

    在comment表中,每个用户最后评论的内容就是id为6,4,11,10的记录。
    使用group by查询:

    select * from comment group by user_id;
    +----+---------+---------+---------------------+---------------------+
    | id | user_id | content | addtime             | lastmodify          |
    +----+---------+---------+---------------------+---------------------+
    |  1 |       1 | 评论1   | 2017-05-17 00:00:00 | 2017-05-17 00:00:00 |
    |  3 |       2 | 评论1   | 2017-05-17 00:00:02 | 2017-05-17 00:00:02 |
    |  5 |       3 | 评论1   | 2017-05-17 00:00:04 | 2017-05-17 00:00:04 |
    |  7 |       4 | 评论1   | 2017-05-17 00:00:06 | 2017-05-17 00:00:06 |
    +----+---------+---------+---------------------+---------------------+
    
    展开全文
  • mysql的order by和group by的用法和区别是什么?

    千次阅读 多人点赞 2017-12-27 16:08:15
    order by 是排序,group by是分组。 下图按save_time排序(记录过多,故仅选10条记录) 下图对上图选出的记录按port排序 下图对第一个图选出记录以save_time分组统计。 由于所有save_time相同,因此只有一组,共10...
    
    IT老友 
         
    

    order by 是排序,group by是分组。

    下图按save_time排序(记录过多,故仅选10条记录)

    下图对上图选出的记录按port排序

    下图对第一个图选出记录以save_time分组统计。

    由于所有save_time相同,因此只有一组,共10条记录。

    下图对第一个图选出记录以port分组统计。

    port 有8118,8123,48888三个不同的值,因此分成三组,分别有4、3、3条记录。

    下图在上图的分组的基础上根据每组数量再排序。

    order by默认asc排序,如果需要降序排序则需指定desc,如:

    order by port desc

    问题虽然简单,为了回答,不得不截图。

    请点赞支持。

    展开全文
  • 使用order by,一般是用来,依照查询结果的某一列(或多列)属性,进行排序(升序:ASC;降序:DESC;默认为升序)。 当排序列含空值时: ASC:排序列为空值的元组最后显示。 DESC:排序列为空值的元组最先显示。...

    前一段时间的面试,问道这个问题,不太清楚了,感觉有必要来总结一下。话不多说,直接开始吧!

     

    一、order by的用法

    使用order by,一般是用来,依照查询结果的某一列(或多列)属性,进行排序(升序:ASC;降序:DESC;默认为升序)。

    当排序列含空值时:

    ASC:排序列为空值的元组最后显示。

    DESC:排序列为空值的元组最先显示。

    为了好记忆,我的理解是,可以把null值看做无穷大,因为不知道具体为多少。然后去考虑排序,asc升序null肯定在最后,而desc降序,null肯定在最前面。(我的想法,轻喷。。。微笑

    1》单一列属性排序

    举例1:默认排序:

    select * from s

     

    select * from s order by sno desc

    按照sno降序:

    2》多个列属性排序

    选择多个列属性进行排序,然后排序的顺序是,从左到右,依次排序。

    如果前面列属性有些是一样的话,再按后面的列属性排序。(前提一定要满足前面的属性排序,因为在前面的优先级高)。

    举例2:

    select * from s  
    order by sname desc, sage desc

     

    首先按照sname降序排序,然后出现了xx一样的,在按照sage降序排序。(默认sage是升序)。

    如果最开始使用sno排序,

    select * from s 
    order by sno desc,  sage asc


    必须先满足前面列属性的排序(sno在前优先级高)。才会去考虑后续列属性的排序。

     

    二、group by的用法

    group by按照查询结果集中的某一列(或多列),进行分组,值相等的为一组。

    1》细化集函数(count,sum,avg,max,min)的作用对象:

    未对查询结果分组,集函数将作用于整个查询结果。

    对查询结果分组后,集函数将分别作用于每个组。

    例子3:

    求各个课程号及相应的选课人数:

    SELECT cno,count(sno) from sc

     

    对整个表进行count。

     

    SELECT cno,count(sno) from sc group by cno


    对分组的表进行count

    sc表内容如下:

    2》GROUP BY子句的作用对象是查询的中间结果表

    分组方法:按指定的一列或多列值分组,值相等的为一组。

    使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性(比如:sno)和集函数(比如:count())。

     

    select sno,count(cno) from sc group by sno


     

    3》多个列属性进行分组举例:

     

    select cno,grade,count(cno) from sc group by cno,grade


    cno为1且成绩为66的,有3个

     

    4》使用HAVING短语筛选最终输出结果

    只有满足HAVING短语指定条件的组才输出。

    HAVING短语与WHERE子句的区别:作用对象不同。

    1》WHERE子句作用于基表或视图,从中选择满足条件的元组

    2》HAVING短语作用于,从中选择满足条件的

    举例:

    查询选修了3门以上课程的学生学号:

     

    select sno from sc group by sno having count(cno)>3


     

    举例:

    查询选修了3门以上课程,且所有课程成绩都高于60分的学生学号及课程数

    select sno , count(cno)
    from sc 
    where grade > 60  
    group by sno having count(cno) > 3


    展开全文
  • order bygroup by 、having的用法区别

    千次阅读 2014-01-08 09:47:50
    order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个...
  • sql之group by和order by区别

    千次阅读 2018-05-28 15:49:09
    今天我们来讲讲sql的group by和order by区别 order by 用于排序,一般与asc升序或desc降序一起使用(默认升序). 例:select * from TABLE order by column desc;(表示降序查询) group by 用于分类汇总,一般与聚合...
  • 浅谈group by和order by的用法和区别

    千次阅读 2017-08-22 11:20:56
    转载出自于:group byorder by区别和用法 前一段时间的面试,问道这个问题,不太清楚了,感觉有必要来总结一下。话不多说,直接开始吧! 一、order by的用法 使用order by,一般是用来,依照查询结果的某一...
  • 文章目录 order by放在最后,order by里要有和group by里一样的字段
  • select * from 学生表 order by 年龄 查询学生表信息、按年龄的升序(默认、可缺省、从低到高)排列显示也可以多条件排序、 比如 order by 年龄,成绩 desc 按年龄升序排列后、再按成绩降序排列group by 分组查询、...
  • where子句: 通过在SELECT语句的WHERE子句中指定条件进行查询,WHERE子句必须紧跟在FROM子句之后。...having一般与group by组合来使用,表示在得到分类汇总记录的基础之上,进一步筛选记录。 如:从部门表里查部门...
  • 数据库查询(group by和order by

    千次阅读 2019-01-21 11:28:58
    我是一个应届生,最近朋友们维护了一个公众号,内容是我们在从应届生过渡到开发这一路所踩过的坑,以及我们一步步学习的记录,如果感兴趣的朋友可以关注一下,一同加油~ 正文 作为一名入坑没多久的“码农”,...
  • 在工作中,有个业务逻辑【类似】需要获取每个用户最高的奖励金额,一开始想到的是先使用group by 对用户进行分组,再order by 按照时间降序排列。(表结构数据如下) SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS ...
  • mysql 中同时使用orderby和groupby的分析

    万次阅读 2017-12-28 20:43:29
    最近做项目写sql的时候同时使用到了order by group by.然而查询出来的结果不是自己想象中的那样.下面来分析一样原因: mysql 写sql的顺序: select -> from-> where->group by->having->order by. 但mysql的...
  • 业务需求,需要查询表里不同分类下的order最大的记录。 查看表中的记录: SELECT id,tid,`order`, FROM_UNIXTIME...ORDER BY `order` DESC ; 结果如下: 排序的sql语句: SELECT id,tid,`order`, FROM_UN...
  • 浅谈group By和order by having用法和区别

    千次阅读 2018-08-24 17:52:12
    一,介绍  1: GROUP BY(分组)...使用GROUP BY的查询语句的时候,选择后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY 后面:  SELECT 部门,COUNT(id)FROM学生组BY 部门  例如:这条sql,如...
  • order by 和group by 一起使用

    千次阅读 2019-05-15 23:55:14
    整理一下 order by 和group by 一起使用的笔记 order by 的执行顺序是从左到右。 如果使用select 列表项对应的位置序号来指定排序项,那么这个数字序号不能大于select 列表里的项目个数。 一般可以使用一个没有被...
  • order by:全局排序 order by 会对数据进行一次全局排序,所以说,只要hive的sql中指定了order by,那么所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。 ...
  • php 中 order by group by区别

    千次阅读 2018-08-03 09:07:16
    order by group by区别 order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 group by 从英文里理解就是分组。必须有“聚合函数”来配合才能...
  • group by order by limit顺序

    千次阅读 2017-05-16 14:03:16
    group by order by limit顺序重要啊!!!,否则报错的!!! 先写group by 在写order by 最后写limit
  • sql语句order bygroup by

    千次阅读 2020-04-21 20:07:23
    1.orderby的用法 1)单一列排序 例1:默认排序: select * from info 例2:按照no倒序排序 select * from info order by no desc; 2)多个列属性排序 选择多个列属性进行排序,然后排序的顺序是,从左到右,依次...
  • 关于oracle中order by和group by

    千次阅读 2018-01-25 16:02:53
    会一点数据库语言的都知道order by是排序,group by是分组,在进行统计数据的时候就会用到group by,没有在聚合函数里面的就必须在group by里,有时候...1使用了orderby和group by组合的例子 create table TEST_TB_GRA
  • GROUP_CONCAT(age ORDER BY age) ageArr FROM student GROUP BY stu_class 结果:  其年龄就是排序的 GROUP_CONCAT会得到这样一个字符串“18,23,23,33”,需要分割 split 如果在js中 //假设...
  • mysql中group by order by一起使用

    千次阅读 2020-12-30 00:09:10
    这样查询其实查询不到最高的一次消费,还存在一个问题,在项目中使用如上类型的sql会报错,因为group by 和order by 一起使用的话需要满足order bygroup by 后面,且order by 排序字段需要在group by 中,这点我...
  • order by group by一起使用

    千次阅读 2018-09-17 13:29:11
    GROUP BY 是按什么条件... 单独使用的时候,都是在sql语句的结尾,但是如果两个条件一起使用的话,则是: GROUP BY order_id ORDER BY order_id DESC ,这句的意思是按照order_id 分组,然后按照order_id降序排序。...
  • 文章目录测试数据1 sql执行顺序2 order by group by什么时候会出现Using filesort --- 理论3 order by group by什么时候会出现Using filesort --- 实践3.1 不会出现 Using filesort的情况 --- 符合最佳左前缀...
  • orderbygroupby同时使用

    千次阅读 2019-09-30 17:27:06
    select c1,max(c2) as a from table group by c1 order by a; in查询按照排序结果: select * from table order by field(c1,1,2,3,4....) 转载于:https://www.cnblogs.com/tripChao/p/8391...
  • sql 先order by,再group by的问题。

    千次阅读 2018-11-01 22:41:12
    打个比方来记录一下这个细节问题。 首先有个test表 想要的数据是:甲 status =0 的一条数据。 ...但如果先group by 再排序,默认机制永远是id...select * from test where id in (select id from test order by `s...
  • 【一】数据分组(group by ): 1.group by和where select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a 2.group by和having select 列a,聚合函数(聚合函数...3.group by和order by sele...
  • 每天数的库都会新增大量数据,作为数的分析师,如何从这些海量数的中看出点玩意来呢?...count() count(1)——包含null,两者不同在于查询速度,假如表沒有主键(Primary key), 那么count(1)比count()快 count...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 409,344
精华内容 163,737
关键字:

orderby和groupby的区别

友情链接: guss.rar