2018-08-12

排序 select 语句的order by 子句,根据需要排序检索出的数据

asc(升序) desc(降序)

升序排列

select age from 表名 order by 字段名 asc;

select 字段名 from 表名 order by 字段名 desc;

多列排序(并指定方向)

select 字段名 。 from 表名 order by 字段排序,字段排序。

为了按多个列排序,只要指定列名,列名之间用逗号分开即可(就 像选择多个列时所做的那样)。 下面的代码检索3个列,并按其中两个列对结果进行排序——首先按年龄,然后再按名称排序。

中文字段排序 。 select * from 表名 order by convert(字段 using gbk) desc(顺序);

现将要排序的字段指明为中文编码

限制查询

指定返回的行数

限定查询

SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句。下面举一个例子:

select name from 表名 limit m;

从开头位置检索m 行 内容;

select 字段名 from 表名 limit start ,count。

从start的后一位置起检索 count行。

1.如果limit 后面只跟了一个数字,

已知:每页显示m条数据,当前显示第n页求第n页的数据

SELECT * FROM sudents WHERE is_delete=0 LIMIT (n-1)*m,m

AVG() 返回某列的平均值

COUNT() 返回某列的行数

MAX() 返回某列的最大值

MIN() 返回某列的最小值

SUM() 返回某列值之和

AVG() 函数

VG()通过对表中行数计数并计算特定列值之和,求得该列的平均 值。 AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值

select avg(字段名) as 别名 from 表名;起一个别名并求此列的数据的平均值

count()函数

COUNT()函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。 COUNT()函数有两种使用方式。 使用COUNT(*)对表中行的数目进行计数, 不管表列中包含的是空值( NULL)还是非空值。

select count(*) from 表名;

使用COUNT(column)对特定列中具有值的行进行计数,忽略 NULL值。 SELECT COUNT(name) FROM customers;

MAX()函数

MAX()返回指定列中的最大值。 MAX()要求指定列名,如下所示

SELECT MAX(age) FROM customers;

MIN()函数

MIN()的功能正好与MAX()功能相反,它返回指定列的最小值.如下所示

SELECT MIN(age) FROM customers;

SUM()函数

SUM()用来返回指定列值的和(总计)。如下所示

SELECT SUM(age) as sum_age from customers;

聚集不同值

下面的例子使用AVG()函数返回同学的平均价格。 它与上面的SELECT语句相同,但使用了DISTINCT参数,因此平均值只考虑各个不同的年龄:

SELECT AVG(DISTINCT age) from customers;

组合聚集函数

上面所有聚集函数例子都只涉及单个函数。但实际上SELECT语句可根据需要包含多个聚集函数。请看下面的例子:

SELECT COUNT(*) as total,   MIN(age) as min_age,   MAX(age) as max_age,   AVG(age) as avg_age   FROM customers;groub by 分组的含义

将查询结果按照1个或多个字段进行分组,字段值相同的为一组

可用于单个字段分组,也可用于多个字段分组

group by 单独使用的意义不大

group by + 集合函数

通过的聚合函数,我们既然可以统计出每个分组的某字段的值的集合,也可以通过集合函数来对这个值的集合做一些操作

SELECT COUNT(*) AS totalnum,age from customers group by age;

根据age分组显示age列表 并显示分组里的数据个数 并命名为totalnum 字段

[图片上传失败...(image-a56337-1534077722652)]

SELECT count(gender),gender FROM studentinfo GROUP BY gender;

SELECT avg(age),gender FROM studentinfo GROUP BY gender;

group by + group_concat()

group_concat(字段名)可以作为一个输出字段来使用,

表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合

SELECT gender,group_concat(student_name) FROM studentinfo GROUP BY gender;

[图片上传失败...(image-23c438-1534077722652)]

group by + group_concat() + 集合函数

SELECT avg(age),gender,group_concat(student_name) FROM studentinfo GROUP BY gender;

group by + with rollup

with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和

SELECT gender,count(*) FROM studentinfo GROUP BY gender with rollup;

在我们使用GROUP BY 时需要知道的一些规矩:

GROUP BY子句可以包含任意数目的列(可以根据多个列进行分组)。这使得能对分组进行嵌套,为数据分组提供更细致的控制。如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的有列都起计算(所以不能从个别的列取回数据)。

GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。

除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子句中给出。

如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。

GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前

如何过滤分组???

MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。例如,可能想要列出至少有两个相同地区以上的用户。为得出这种数据,必须基于完整的分组而不是个别的行进行过滤

HAVING

HAVING子句。 HAVING非常类似于WHERE。事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。

having 条件表达式:用来分组查询后指定一些条件来输出查询结果

having作用和where类似,但having只能用于group by

SELECT COUNT(),age,adress FROM customers GROUP BY age,adress HAVING COUNT() >= 2;

SELECT COUNT(*),age,adress FROM customers GROUP BY age,adress HAVING age >= 2;

SELECT COUNT(*),age,adress FROM customers GROUP BY age,adress HAVING age >= 2 and adress LIKE '%搜索关键字%';

HAVING和WHERE的差别 这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别, WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。

SELECT COUNT(),age,adress FROM customers WHERE adress LIKE '北%' GROUP BY age,adress HAVING COUNT() >= 2;

查询语句的顺序

select

列,列

表名

where

条件

group by

列,列,

HAVING

条件

order by

列 (desc| asc)

limit srart,count

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容