📅  最后修改于: 2023-12-03 15:32:59.515000             🧑  作者: Mango
在 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)
来获取每个部门的职位名称列表,该函数将职位名称串联成一个字符串。除了 GROUP BY 子句之外,还有一个 HAVING 子句,可用于筛选分组后的行。HAVING 子句的过滤条件基于聚合数据而不是原始数据。例如,我们可以在以下示例中找出具有大于 10 名雇员的部门:
SELECT department, COUNT(*) AS count
FROM employees
GROUP BY department
HAVING count > 10;
CUBE 和 ROLLUP 也是 GROUP BY 语句的一部分,用于创建聚合数据子集。CUBE 子句的结果包含所有可能的组合,而 ROLLUP 子句进行总计计算。例如:
SELECT department, job_title, SUM(salary)
FROM employees
GROUP BY ROLLUP(department, job_title);
这个示例将按 部门+职位 的分组查询出每个分组的工资总额,同时在末尾显示所有部门总和、所有职位总和和总和总和.
以上就是 MS SQL Server 中分组依据子句的介绍,它是 SQL 语言中非常重要的元素之一。