数据排序

在SELECT 语句中,可以使用ORDER BY子句实现对查询结果的排序。
语法格式为:ORDER BY {列名|表达式|正整数} [ASC|DESC] [,…n]
例如,让商品Goods表以价格降序:

SELECT * FROM Goods 
ORDER BY gdPrice  DESC ;

mysql创建数据库排序规则 mysql数据库排序语句_升序


其中{列名|表达式|正整数}为排序的关键字,ASC为升序(默认为升序),DESC为降序;当指定的关键字不止一个时,列名之间用逗号隔开。

例如:让商品Goods表以价格降序再以销售量升序

SELECT * FROM Goods 
ORDER BY  gdPrice DESC,gdSaleQty;

LIMIT语句

LIMIT语句可以限制结果集返回的行数,语法为:LIMIT [OFFSET,] 记录数
例如:查询Goods表前3行的数据

SELECT * FROM goods
ORDER BY gdPrice  DESC 
LIMIT 3;

mysql创建数据库排序规则 mysql数据库排序语句_结果集_02


其中·,OFFSET为偏移量,偏移量为0则从第一条记录开始查询,为1时从第二天记录开始查询,以此类推。如果不设置默认为0。

例如:查询Goods表从第4行连续3行的数据

SELECT * FROM goods
ORDER BY gdPrice  DESC 
LIMIT 3,3;

mysql创建数据库排序规则 mysql数据库排序语句_结果集_03

数据分组统计

聚合函数

函数名

说明

SUM

返回组中所有值的和

MAX

返回组中的最大值

COUNT

返回组中的项数

AVG

返回组中各值的平均值

MIN

返回组中的最小值

GROUP_CONCAT

返回一个字符串结果,该结果由分组中的值连接组合而成

(1)SUM、AVG、MAX、MIN语法格式为:
SUM/AVG/MAX/MIN ([ALL/DISTINCT] 列名|常量|表达式)
例如:查询Goods表,统计所有商品的总销售量。

SELECT SUM(gdSaleQty) FROM goods;

(2)COUNT语法为:COUNT ({{[ALL|DISTNCT] 列名|常量|表达式|*}})
例如:查询Orders表,显示购买过商品的用户人数:

SELECT COUNT(DISTINCT uID) FROM orders;

GROUP BY子句

利用GROUP BY子句可以按照指定的列分组,语法格式为:

GROUP BY [ALL] 列名1,列名2 [,…n] [WITH ROLLUP] [HAVING 条件表达式]

其中,ALL将显示所有组,是默认值。列名为分组依据列。不能使用在SELECT列表中定义的别名来指定列;使用WITH ROLLUP关键字指定的结果集不仅包括由GROUP BY提供的行,同时还包括汇总行;HAVING用来指定分组后的数据集进行过滤。

例如:查询users表,用uCity列分组

mysql创建数据库排序规则 mysql数据库排序语句_升序_04


这样查询只会查询到每一组中的第一条记录。所有通常GROUP BY关键字会与聚合函数一起使用。

例如:查询users表,统计各城市的人数

SELECT uCity,COUNT(*) FROM USERS GROUP BY uCITY;

mysql创建数据库排序规则 mysql数据库排序语句_结果集_05


GROUP_CONCAT和GROUP BY一起使用时可以实现同一个分组中某个列的数据值按照指定的分隔符连接:

语法格式为:GROUP_CONCAT([DISTINCT] 表达式 [ORDER BY 列名] [SEPARATOR 分隔符])

其中,SEPARATOR是一个字符串值,用于插入到结果值中,默认为逗号(,),也可以指定为"",完全一出这个分隔符,还有注意的是GROUP_CONCAT必须跟GROUP BY一起使用。

例如:查询users表,将同一个城市uid用”,“隔开,列名为uids`。

SELECT uCity,GROUP_CONCAT(UID)AS UIDS FROM USERS GROUP BY uCITY;

mysql创建数据库排序规则 mysql数据库排序语句_mysql_06


WITH ROLLUP 关键字和HAVING关键字

WITH ROLLUP 关键字和HAVING关键字都用于设置条件表达式对查询结果集进行筛选,区别在于HAVING关键字可以使用且只能跟GROUP BY 一起使用。

例如:利用WITH ROLLUP 关键字查询users表,统计上海和长沙人数

SELECT uCity,COUNT(*)  FROM USERS  WHERE UCITY IN ('长沙','上海')GROUP BY uCITY WITH ROLLUP;

mysql创建数据库排序规则 mysql数据库排序语句_结果集_07


可以看到除了长沙和上海之外这里还有各NULL,这里NULL表示这两个城市之间的总人数。

例如:利用HAVING关键字查询users表,统计各城市的人数并只把人数大于3的城市显示

SELECT uCity,COUNT(*)  FROM USERS  GROUP BY UCITY HAVING COUNT(*)>3;

mysql创建数据库排序规则 mysql数据库排序语句_升序_08