SQL研习录(28)——ORDER BY与GROUP BY
版权声明
- 本文原创作者:清风不渡
- 博客地址:https://blog.csdn.net/WXKKang
因为这两个比较容易混淆,故在此记录作以区分,首先我们建立一组测试数据,代码如下:
CREATE TABLE student(
s_id varchar(50) NOT NULL PRIMARY KEY,
s_name varchar(50),
s_gender varchar(50),
s_age int
)
INSERT INTO student (s_id,s_name,s_gender,s_age) VALUES ('S101','Lucy','female',11);
INSERT INTO student (s_id,s_name,s_gender,s_age) VALUES ('S102','Jack','male',16);
INSERT INTO student (s_id,s_name,s_gender,s_age) VALUES ('S103','Bruce','male',18);
INSERT INTO student (s_id,s_name,s_gender,s_age) VALUES ('S104','Tom','male',14);
INSERT INTO student (s_id,s_name,s_gender,s_age) VALUES ('S105','Jayce','male',15);
一、ORDER BY
如果从表中査询出来的数据是无序的或者其排列顺序不是我们期望的,我们就可以使用ORDER BY语句来为查询结果进行排序,具体的使用很简单,语法如下:
SELECT column_name1,column_name2,...|*
FROM table_name
[ORDER BY column_name1 [ASC|DESC],column_name2 [ASC|DESC],...];
注: ASC为按升序排序,而DESC则为按降序排序
例如:上面的测试数据,如果我们需要将查询的结果以年龄排序,可以使用下面的语句:
SELECT *
FROM student
ORDER BY s_age ASC;
执行结果如下:
如果需要按年龄的逆序排序,则可使用如下语句:
SELECT *
FROM student
ORDER BY s_age DESC;
执行结果如下:
二、GROUP BY
GROUP BY是用来分组的,我们可以使用它来对表中数据进行统计时也可能需要按照一定的类別进行统计,它的基本语法如下所示:
SELECT column_name1,column_name2,...|*
FROM table_name
GROUP BY column_name1,column_name2,...[HAVING 条件表达式]
上面就是GROUP BY语句的基本语法,至于HAVING表达式是什么,下一篇会详细介绍,现在可以先不用理会,我们先来学习GROUP BY语句:
情况一:单独使用GROUP BY语句
我们可以简单的只使用GROUP BY语句,例如将上面的测试数据(学生数据)按性别分组显示,使用如下代码:
SELECT s_gender
FROM student
GROUP BY s_gender;
执行结果如下:
由执行可以看出来,将s_gender列中的五条数据分为了两组,但是五条数据怎么变成两条了呢?因为这样的查询结果只显示每个分组中的一条记录,没有太大的实际意义。通常情况下GROUP BY都聚合函数一起使用
情况二:GROUP BY和聚合函数一起使用
我们就来个最简单的例子,使用COUNT()函数来查询每组有多少条记录,代码如下:
SELECT COUNT(*) as '记录数',s_gender
FROM student
GROUP BY s_gender;
执行结果如下: