SQL数据库高级查询语句--去重,排序,分组查询,聚合函数,分组及综合查询

高级查询–distint,order by,limit

#`select`语句中,可以使用`distinct`关键字对查询的结果集进行去重。
select distinct 列1, ... , 列n  from table_name [其他子句];
#`order by`用于对结果进行排序显示,可以使用`ASC`(升序) / `DESC`(降序)两种方式进行排序,可以有多个排序条件
select [distinct] 列1, ... , 列n from table_name [其他子句] order by 排序列1 [DESC], 排序列2 [DESC];
#分页查询limit子句
select * from emp limit 0,2;
#- 第一个参数0是表示从第几条开始查询 (这里 0 是可省略);第二个参数 表示查询出几条数据
select * from table_name  limit (页码 - 1) * 每页数量, 每页数量;
select distinct deptname  from dept ;
select * from dept order by deptno desc;-- 部门编号降序, 部门名称降序
select * from dept order by deptno DESC, deptname DESC;
-- ASC升序,DESC降序。默认升序。select * from dept order by deptno;
select * from dept limit 1,3;-- 从第一条开始查三条数据
select * from dept limit 2,3;-- 从第二条数据开始查三条数据
-- n表示页数 s 表示页大小.  limit (n - 1) * s, s
insert into dept(deptno, deptname) values(10, '研发部');
Query OK, 1 row affected (0.04 sec)

mysql> insert into dept(deptno, deptname) values(2, '研发部');
Query OK, 1 row affected (0.00 sec)

mysql> select * from dept;
+--------+-------------+
| deptno | deptname    |
+--------+-------------+
|      1 | kfm·研发部 |
|      1 | kfm·人事部 |
|      1 | kfm·宣传部 |
|      5 | kfm·组织部 |
|      6 | kfm·后勤部 |
|      7 | kfm·财务部 |
|     10 | 研发部      |
|      2 | 研发部      |
+--------+-------------+
8 rows in set (0.00 sec)

mysql> select distinct deptname  from dept ;
+-------------+
| deptname    |
+-------------+
| kfm·研发部 |
| kfm·人事部 |
| kfm·宣传部 |
| kfm·组织部 |
| kfm·后勤部 |
| kfm·财务部 |
| 研发部      |
+-------------+
7 rows in set (0.00 sec)

mysql> select * from dept;
+--------+-------------+
| deptno | deptname    |
+--------+-------------+
|      1 | kfm·研发部 |
|      1 | kfm·人事部 |
|      1 | kfm·宣传部 |
|      5 | kfm·组织部 |
|      6 | kfm·后勤部 |
|      7 | kfm·财务部 |
|     10 | 研发部      |
|      2 | 研发部      |
+--------+-------------+
8 rows in set (0.00 sec)

mysql> select * from dept order by deptno desc;
+--------+-------------+
| deptno | deptname    |
+--------+-------------+
|     10 | 研发部      |
|      7 | kfm·财务部 |
|      6 | kfm·后勤部 |
|      5 | kfm·组织部 |
|      2 | 研发部      |
|      1 | kfm·研发部 |
|      1 | kfm·人事部 |
|      1 | kfm·宣传部 |
+--------+-------------+
8 rows in set (0.00 sec)

mysql> select * from dept order by deptno DESC, deptname DESC;
+--------+-------------+
| deptno | deptname    |
+--------+-------------+
|     10 | 研发部      |
|      7 | kfm·财务部 |
|      6 | kfm·后勤部 |
|      5 | kfm·组织部 |
|      2 | 研发部      |
|      1 | kfm·研发部 |
|      1 | kfm·宣传部 |
|      1 | kfm·人事部 |
+--------+-------------+
8 rows in set (0.00 sec)

mysql> select * from dept limit 1,3;
+--------+-------------+
| deptno | deptname    |
+--------+-------------+
|      1 | kfm·人事部 |
|      1 | kfm·宣传部 |
|      5 | kfm·组织部 |
+--------+-------------+
3 rows in set (0.00 sec)

mysql> select * from dept limit 2,3;
+--------+-------------+
| deptno | deptname    |
+--------+-------------+
|      1 | kfm·宣传部 |
|      5 | kfm·组织部 |
|      6 | kfm·后勤部 |
+--------+-------------+
3 rows in set (0.00 sec)

聚合函数

SUM 求和、max求最大值、min求最小值、avg求平均值、count求数量

select sum(列)/max(列)/min(列)/avg(列)/count(列) from table_name [其他子句];
select sum(deptno) deptno from dept;
select max(deptno) deptno from dept;
select min(deptno) deptno from dept;
select avg(deptno) deptno from dept;
select count(deptno) deptno from dept;
-- 使用了聚合函数的查询,目前 在select 的字段只能是聚合函数
mysql> select sum(deptno) deptno from dept;
+--------+
| deptno |
+--------+
|     33 |
+--------+
1 row in set (0.00 sec)

mysql> select max(deptno) deptno from dept;
+--------+
| deptno |
+--------+
|     10 |
+--------+
1 row in set (0.00 sec)

mysql> select min(deptno) deptno from dept;
+--------+
| deptno |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

mysql> select avg(deptno) deptno from dept;
+--------+
| deptno |
+--------+
| 4.1250 |
+--------+
1 row in set (0.00 sec)

mysql> select count(deptno) deptno from dept;
+--------+
| deptno |
+--------+
|      8 |
+--------+
1 row in set (0.00 sec)

group by,having

group by—对数据进行分组,表中有相同值的分为一组。

group by分组后的查询中,select的列不能出现除了group by 分组条件以及聚合函数外的其他列。

select 列1, 列2, (聚合函数) from table_name group by 列1, 列2;
-- group by 语句通常用于配合聚合函数
select cart_id,goods_no,num,count(*) from cart group by cart_id,goods_no,num; 

mysql> use store;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_store |
+-----------------+
| account         |
| cart            |
| category        |
| goods           |
+-----------------+
4 rows in set (0.00 sec)

mysql> select * from cart;
+---------+----------+------+------------+---------------------+
| cart_id | goods_no | num  | account_id | create_time         |
+---------+----------+------+------------+---------------------+
|       1 |        1 |    2 |          2 | 2023-03-11 19:50:00 |
|       2 |        2 |    2 |          3 | 2023-03-12 19:50:00 |
|       3 |        4 |   10 |          4 | 2023-03-13 19:50:00 |
|       4 |        6 |   20 |          3 | 2023-03-12 19:50:00 |
|       5 |        9 |    2 |          2 | 2023-03-12 17:50:00 |
|       6 |        2 |   10 |          4 | 2023-03-13 17:50:00 |
+---------+----------+------+------------+---------------------+
6 rows in set (0.00 sec)

mysql> select cart_id,goods_no,num,count(*) from cart group by cart_id,goods_no,num;
+---------+----------+------+----------+
| cart_id | goods_no | num  | count(*) |
+---------+----------+------+----------+
|       1 |        1 |    2 |        1 |
|       2 |        2 |    2 |        1 |
|       3 |        4 |   10 |        1 |
|       4 |        6 |   20 |        1 |
|       5 |        9 |    2 |        1 |
|       6 |        2 |   10 |        1 |
+---------+----------+------+----------+
6 rows in set (0.00 sec)

having是对group by分组后的结果集进行筛选。

select 列1, 列2, (聚合函数) from table_name group by 列1, 列2 having 分组后条件;
select good_no,sum(price) from goods group by good_no having sum(price) > 3;
mysql> select good_no,sum(price) from goods group by good_no having sum(price) > 3;
+---------+------------+
| good_no | sum(price) |
+---------+------------+
|       1 |          5 |
|       2 |        3.5 |
|       3 |       25.5 |
|       6 |         50 |
|       7 |          8 |
|       8 |       1700 |
|       9 |         50 |
+---------+------------+
7 rows in set (0.00 sec)

综合查询

SELECT DISTINCT emp.deptno FROM emp JOIN dept ON emp.deptno = dept.deptno WHERE bridate >= '2000-01-01' GROUP BY emp.deptno HAVING count(*) >= 2 ORDER BY count(*) DESC 
select distinct cost,max(category_no) from goods where good_no > 3 group by cost having max(category_no);
mysql> select distinct cost,max(category_no) from goods where good_no > 3 group by cost having max(category_no);
+------+------------------+
| cost | max(category_no) |
+------+------------------+
|  0.8 |                2 |
|  0.2 |                2 |
|   30 |                3 |
|    5 |                3 |
| 1350 |                5 |
|   40 |                4 |
+------+------------------+
6 rows in set (0.00 sec)

rows in set (0.00 sec)


### 综合查询

```mysql
SELECT DISTINCT emp.deptno FROM emp JOIN dept ON emp.deptno = dept.deptno WHERE bridate >= '2000-01-01' GROUP BY emp.deptno HAVING count(*) >= 2 ORDER BY count(*) DESC 
select distinct cost,max(category_no) from goods where good_no > 3 group by cost having max(category_no);
mysql> select distinct cost,max(category_no) from goods where good_no > 3 group by cost having max(category_no);
+------+------------------+
| cost | max(category_no) |
+------+------------------+
|  0.8 |                2 |
|  0.2 |                2 |
|   30 |                3 |
|    5 |                3 |
| 1350 |                5 |
|   40 |                4 |
+------+------------------+
6 rows in set (0.00 sec)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SQL Server聚合函数可以在查询使用,用于对数据进行汇总和计算。常见的聚合函数包括SUM、AVG、COUNT、MAX和MIN等。 在使用聚合函数时,需要注意以下几点: 1. 聚合函数只能用于SELECT语句的SELECT列表或HAVING子句。 2. 聚合函数可以对一列或多列数据进行计算,也可以对所有行进行计算。 3. 聚合函数可以与GROUP BY子句一起使用,用于分组后的数据进行计算。 4. 聚合函数可以嵌套使用,用于进行复杂的计算。 例如,以下查询使用SUM函数计算销售总额: SELECT SUM(SalesAmount) AS TotalSales FROM Sales 以下查询使用AVG函数计算平均销售额,并按照产品类型进行分组: SELECT ProductType, AVG(SalesAmount) AS AvgSales FROM Sales GROUP BY ProductType 以上就是SQL Server聚合函数查询的使用方法。 ### 回答2: 在SQL Server聚合函数是一种非常常用的查询函数,它们可以对表的数据进行统计和计算,例如计算平均值,求和,最大值,最小值,计数等等。这些函数通常用于查询语句的SELECT子句,在其计算返回的结果的总和、平均值等信息。 SQL Server支持多种聚合函数,其一些常用的包括SUM、AVG、COUNT、MAX和MIN。这些函数将返回与查询有关的表格的列的数据值的聚合值。例如,如果您要计算特定分组的平均订单金额,则可以使用AVG函数将此计算公式嵌入到查询。 此外,聚合函数还可以用作表达式或复合列。使用SUM函数计算表基于当前筛选的数据值的总和是一个很好的例子。另外,你还可以使用聚合函数将特定条件下的总数计算输出。 聚合函数查询的使用有诸多优点。它们可以帮助我们更快速地进行数据统计和分析,简化我们的工作流程。同样地,聚合函数不仅计算传入的数据集的总和,并且还可以用于计算分组的数据。这些值可能是代表某个客户的订单,也可能是某个时间段里发生的订单总数。 因此,学习和使用SQL Server的聚合函数数据库查询必不可少的能力,掌握聚合函数的使用将大大提高用户的工作效率和精度。在应用聚合函数的使用帮助数据分析人员了解具体的市场趋势和消费习惯,具有重要的商业价值。 ### 回答3: SQL Server聚合函数是一种非常有用的工具,它们可以对结果集进行各种计算和聚合。聚合函数是在SELECT语句使用的,它们通常用于计算一系列值的总和、平均值、最大值或最小值等。在SQL Server最常用的聚合函数包括SUM、COUNT、AVG、MAX和MIN等。 首先我们来看一下SUM函数,这个函数用于计算一个数值列的总和,例如: SELECT SUM(SaleAmount) FROM Sales; 这条SQL语句将计算销售表所有销售金额的总和,并将结果返回。COUNT函数用于计算一个表行的数量,例如: SELECT COUNT(*) FROM Sales; 这条SQL语句将返回Sales表所有行的数量。AVG函数用于计算数值列的平均值,例如: SELECT AVG(SaleAmount) FROM Sales; 这条SQL语句将计算销售表所有销售金额的平均值,并将结果返回。MAX和MIN函数用于计算数值列的最大和最小值,例如: SELECT MAX(SaleAmount) FROM Sales; SELECT MIN(SaleAmount) FROM Sales; 这些函数都可以做到很多比较有用的事情。例如,可以使用它们来查找最高、最低、平均、总和或其他统计量等。聚合函数也可以结合GROUP BY子句使用,以根据特定的列对结果集进行分组聚合计算。例如: SELECT CustomerName, SUM(SaleAmount) FROM Sales GROUP BY CustomerName; 这条SQL语句将返回按客户名称分组的销售总额。 总之,SQL Server聚合函数是非常有用的工具,可以帮助我们对结果集进行各种计算和聚合操作。熟练掌握聚合函数的使用方法,可以大大提高我们的查询效率和准确度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值