SQL语句之order by 、group by、having、where

百度知道:1.order by是 按字段进行排序.. 字段后面可跟desc降序..asc升序..默认为升序2.group by是进行分组查询3.having和where都属于条件过滤 区别在于一般having是和group by连用... group by...having... 表示先分组再条件过滤而如果在group by前面有where,则是表示先条件过滤再分组 这个在实际中特殊的查询会影响到查询结果。PS: 这几条关键字是有先后顺序的,where...group by...having...order by  都是可选,但是如果全部写出来,必须是这个顺序。================================
言归正传!

一、Where

select * from tableName where id="2012";


就是查找tableName中,id=2012的记录。


这里的where对查询的结果进行了筛选。只有满足where子句中条件的记录才会被查询出来。

二、Group By


根据上表,需求:求出Apple在China,Japan,USA的平均价格,你怎么办?


可以这么做:select avg(price) from tablename where fruitname="apple";


Group By 一般是和一些聚合函数一起使用,比如上面我们用到的求平均的函数avg,还有求和sum,求个数count,求最大max,求最小min。


对于上表,求每种水果的最大的价格:select fruitname,productplace,max(price) from tablename group by fruitname


Group By 还有一个重要的合作对象,就是having。


三、Having


用Group By 进行分组后,如何对分组后的结果进行筛选呢?having可解决这个难题。


1.首先看一个例子:求平均价格在3.0以上的水果


如果使用:


select fruitname,avg(price) from tablename where avg(price)>=3.0 group by fruitname ;


这样能否达到我们的要求呢?


答案是否定的,因为where子句不能使用聚合函数。为了解决这个问题,我们来用下我们的杀手锏,他就是Having;


改写如下:select fruitname,avg(price) from tablename group by fruitname having avg(price)>=3.0;


2.我们继续看Having的另外一个匪夷所思


select fruitname,avg(price) from tablename group by fruitname having price<2.0;


这个查询的结果你们觉得会是什么呢?


没错,就是 orange 0.8 ;只有这一条记录


为什么呢?为什么Apple没有被查到呢,因为apple的有的价格超出了2.0.


另外运算符in也可以用在having 子句。


select fruitname,avg(price) from tablename group by fruitname having fruitname in ("orange","apple");


四、Order By


Order By是对查询的结果进行一个再排序的过程,一般放在查询语句的最后,可以是单列,也可以实现多列的排序。


分为升序asc和降序desc,默认的为升序。


Order By单列的排序比较简单,多列的也不麻烦。


select * from tablename group by friutname order by fruitname asc,price desc.

 
时间: 2024-10-07 12:15:36

SQL语句之order by 、group by、having、where的相关文章

sql语句count 与与group By

1.多行函数 其中 max(字段)-----------最大值 MIN(字段)----------最小值 SUM(字段)-----------求和 AVG( 字段 )-------------求平均 cont(字段或*)----------对字段数据计数,*计算数据行数 几个都是多行函数,如果语句中有这样的函数而没有写groupby某个字段 则函数avg()会将所有行数据进行计算,得到一条数据,这几个都是多行函数,如果你 语句中有 其中的函数,如 avg(),而没有写group by 某个字段,

sql语句中order by 多个字段同时排序的应用

order  by 后面可以跟多个字段进行排序 用A1代表第一个字段,A2代表第二个字段 一.order by A1 , A2  desc   指的是用A1升序A2降序 二.order by A1 asc , A2  desc  指的是用A1升序A2降序 三.order by A1 desc , A2  desc  指的是用A1降序A2降序 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/10240274.html

SQL语句:Group By总结

1. Group By 语句简介: Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)".它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理. P.S. 这里真是体会到了一个好的命名的力量,Group By从字面是直接去理解是非常好理解的.恩,以后在命名的环节一定要加把劲:).话题扯远了. 2. Group By 的使用: 上面已经给出了对Group By语句的理解.基于这个理解和SQL Server 2

数据库之sql语句汇总20180616

/*******************************************************************************************/ 一.SQL简介 SQL:结构化查询语言 SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统. SQL 语句用于取回和更新数据库中的数据.SQL 可与数据库程序协同工作,比如 MS Access.DB2.Informix.MS SQL Server.Oracle.Sybase 以及其他数据库系统

sql篇 select from where group by having order by

以前,自己总是记不住如何用group by,如何用order by,什么时候用group by,什么时候用order by,什么时候两者一起用,怎么用,谁先谁后,现在,我们就一起来说一下Select   from   where   groupby   having   order by 的那些事,简单的总结一下,加深一下自己的印象,也给有需要的人提供点资源 Select   from   where   groupby   having   order by ,不用说,select from肯

LINQ to SQL语句(5)之Order By

Order By操作 适用场景:对查询出的语句进行排序,比如按时间排序 等等. 说明:按指定表达式对集合排序:延迟,:按指定表达式对集合 排序:延迟,默认是升序,加上descending表示降序,对应的扩展方法是 OrderBy和OrderByDescending 1.简单形式 这个例子使用 orderby 按雇用日期对雇员进行排序: var q = from e in db.Employees orderby e.HireDate select e; 说明:默认为升序 2.带条件形式 注意:W

LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains

我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符. Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:使用Group By按Cat

(转)最常用的SQL排序、分组与统计的使用方法 Order by/Group by/having等的使用

以一种有意义的方式组织数据可能是一项挑战.有时你需要的可能是一个简单的排序,但是通常你需要做更多,你需要分组来进行分析和统计.幸运的 是,SQL提供了大量语句和操作来进行排序,分组和摘要.下面的一些技巧将会帮助你识别什么时候排序,什么时候分组,什么时候以及如何统计.对要每条语句 和操作的详细信息请查看Books Online. 1. 使用排序使数据有序 通常,你的所有数据真正需要的仅仅是按某种顺序排列.SQL的ORDER BY语句可以以字母或数字顺序组织数据.因此,相似的值按组排序在一起.然而,

执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c

注意: 采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci 在运行sql语句时,出现以下问题: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c 原因: MySQL 5.7.5及以上功能依赖检测功能.如果启用了ONLY_FULL_GROUP_BY S