📜  MS SQL Server中的分组依据子句(1)

📅  最后修改于: 2023-12-03 15:32:59.515000             🧑  作者: Mango

MS SQL Server中的分组依据子句

在 MS SQL Server 中的 SELECT 语句中,我们可以使用 GROUP BY 子句将行分组成集合,从而可以进行聚合计算和数据汇总等操作。下面是一个基本的 GROUP BY 语法示例:

SELECT column1, SUM(column2)
FROM table1
GROUP BY column1

在这个示例中,我们选择了一列( column1 )和另一列( column2 )的总和。然后,我们使用 GROUP BY column1 子句来将结果按 column1 列的值分组。这样,我们就可以得到每个 column1 值的总和。

在 GROUP BY 语句中还可以使用以下操作:

聚合操作函数

GROUP BY 语句通常涉及到计算行的总数、 平均值、最大值或最小值等聚合操作。SQL Server 提供了许多内置的聚合操作函数,例如 SUM、AVG、MAX、MIN 等。下面是一些示例:

  • 计算某列数据的总和:
SELECT department, SUM(salary) 
FROM employees 
GROUP BY department;
  • 计算某列数据的平均值:
SELECT department, AVG(salary) 
FROM employees 
GROUP BY department;
  • 计算某列数据的最大值和最小值:
SELECT department, MAX(salary), MIN(salary) 
FROM employees 
GROUP BY department;
聚合操作函数的运用

以下是更复杂的示例,它们涉及多个表、使用多个聚合函数和 WHERE 子句进行筛选:

  • 查询每个部门的平均工资和聘用的员工数量:
SELECT department, AVG(salary), COUNT(*) 
FROM employees 
GROUP BY department;
  • 查询每个部门的平均工资、职位数量和职位名称列表:
SELECT department, AVG(salary), COUNT(*) AS count, GROUP_CONCAT(job_title) AS titles 
FROM employees 
GROUP BY department;

关于上述查询:

  • 我们使用 AVG(salary) 来计算每个部门的平均工资。
  • 我们使用 COUNT(*) 来计算每个部门的员工数量。
  • 我们使用 GROUP_CONCAT(job_title) 来获取每个部门的职位名称列表,该函数将职位名称串联成一个字符串。
HAVING 子句

除了 GROUP BY 子句之外,还有一个 HAVING 子句,可用于筛选分组后的行。HAVING 子句的过滤条件基于聚合数据而不是原始数据。例如,我们可以在以下示例中找出具有大于 10 名雇员的部门:

SELECT department, COUNT(*) AS count 
FROM employees 
GROUP BY department 
HAVING count > 10;
CUBE 和 ROLLUP 子句

CUBE 和 ROLLUP 也是 GROUP BY 语句的一部分,用于创建聚合数据子集。CUBE 子句的结果包含所有可能的组合,而 ROLLUP 子句进行总计计算。例如:

SELECT department, job_title, SUM(salary) 
FROM employees 
GROUP BY ROLLUP(department, job_title);

这个示例将按 部门+职位 的分组查询出每个分组的工资总额,同时在末尾显示所有部门总和、所有职位总和和总和总和.

以上就是 MS SQL Server 中分组依据子句的介绍,它是 SQL 语言中非常重要的元素之一。