什么是分组查询?
在 SQL 中,分组查询就是将结果集根据指定的列进行分组,然后对每个分组进行聚合操作,例如对每个分组求和、计算平均值等。
常见的分组查询包括 GROUP BY 子句和聚合函数,例如 COUNT、SUM、AVG 等。
利用 MSSQL 实现分组查询
创建测试数据
为了演示分组查询,我们需要创建一些测试数据。以下是用于创建测试数据的 SQL 语句:
CREATE TABLE sales
(
order_id int PRIMARY KEY,
sales_date date,
sales_amount decimal(10, 2)
);
INSERT INTO sales VALUES (1, '2021-01-01', 100.00);
INSERT INTO sales VALUES (2, '2021-01-02', 200.00);
INSERT INTO sales VALUES (3, '2021-01-03', 300.00);
INSERT INTO sales VALUES (4, '2021-01-04', 400.00);
INSERT INTO sales VALUES (5, '2021-01-05', 500.00);
INSERT INTO sales VALUES (6, '2021-01-06', 600.00);
INSERT INTO sales VALUES (7, '2021-01-07', 700.00);
INSERT INTO sales VALUES (8, '2021-01-08', 800.00);
INSERT INTO sales VALUES (9, '2021-01-09', 900.00);
INSERT INTO sales VALUES (10, '2021-01-10', 1000.00);
以上 SQL 语句创建了一个名为 sales 的表,并向其中插入了 10 条记录,每条记录包含订单 ID、销售日期和销售金额三个字段。
使用 GROUP BY 分组查询
使用 MSSQL 实现 GROUP BY 分组查询的语法如下:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
其中,column_name(s) 指定需要进行分组的列名,可以指定多个列名,用逗号隔开。condition 指定筛选条件,如果不需要筛选,则可以省略 WHERE 子句。
以下例子演示了如何按照销售日期进行分组查询,计算每个日期的销售总金额:
SELECT sales_date, SUM(sales_amount)
FROM sales
GROUP BY sales_date
以上 SQL 语句中,列出了需要查询的两个字段 sales_date 和 sales_amount,sales_date 列用于分组查询,SUM(sales_amount) 则表示对 sales_amount 列进行求和计算。
执行以上 SQL 语句,将会得到以下结果:
sales_date | (No column name) |
---|---|
2021-01-01 | 100.00 |
2021-01-02 | 200.00 |
2021-01-03 | 300.00 |
2021-01-04 | 400.00 |
2021-01-05 | 500.00 |
2021-01-06 | 600.00 |
2021-01-07 | 700.00 |
2021-01-08 | 800.00 |
2021-01-09 | 900.00 |
2021-01-10 | 1000.00 |
使用 HAVING 进行分组过滤
如果需要在 GROUP BY 查询中筛选出某些分组,可以使用 HAVING 子句实现。HAVING 子句在 GROUP BY 子句之后执行,用于筛选聚合后的数据。
以下例子演示了如何使用 HAVING 子句筛选出销售总金额大于 500 的日期:
SELECT sales_date, SUM(sales_amount)
FROM sales
GROUP BY sales_date
HAVING SUM(sales_amount) > 500
执行以上 SQL 语句,将会得到以下结果:
sales_date | (No column name) |
---|---|
2021-01-06 | 600.00 |
2021-01-07 | 700.00 |
2021-01-08 | 800.00 |
2021-01-09 | 900.00 |
2021-01-10 | 1000.00 |
使用多个列进行分组查询
在 GROUP BY 查询中,可以指定多个列名来进行分组。以下例子演示了如何按照销售日期和销售金额两个字段进行分组查询,计算每个日期每个金额的销售数量:
SELECT sales_date, sales_amount, COUNT(*)
FROM sales
GROUP BY sales_date, sales_amount
执行以上 SQL 语句,将会得到以下结果:
sales_date | sales_amount | (No column name) |
---|---|---|
2021-01-01 | 100.00 | 1 |
2021-01-02 | 200.00 | 1 |
2021-01-03 | 300.00 | 1 |
2021-01-04 | 400.00 | 1 |
2021-01-05 | 500.00 | 1 |
2021-01-06 | 600.00 | 1 |
2021-01-07 | 700.00 | 1 |
2021-01-08 | 800.00 | 1 |
2021-01-09 | 900.00 | 1 |
2021-01-10 | 1000.00 | 1 |
结语
本文介绍了如何利用 MSSQL 实现分组查询。在实际工作中,分组查询是非常常见的需求,掌握好相关技能可以提高工作效率。
需要注意的是,在 GROUP BY 查询中,分组的列名需要与 SELECT 查询中列出的列名保持一致,否则会出现语法错误。