sql中groupby函数用法
时间: 2024-12-31 10:46:45 浏览: 21
### SQL `GROUP BY` 语句详解
#### 理解 `GROUP BY`
`GROUP BY` 可以按指定字段对数据进行分组处理,类似于 Excel 中的透视表功能。通过该命令可以实现基于特定条件的数据汇总分析操作[^1]。
#### 聚合函数的应用
为了使 `GROUP BY` 更加有用,在查询中通常会结合聚合函数一起使用:
- **COUNT()**: 统计每一组内的记录数量。
- **SUM()**: 计算某一列数值总和。
- **AVG()**: 获取某列平均值。
- **MAX()/MIN()**: 找出最大/最小值。
这些函数帮助我们更好地理解和利用已有的数据集合。
#### 单一字段分组实例
下面是一个简单的例子,展示了如何按照城市名称(`city`)来进行分组并统计每个城市的公司数目:
```sql
SELECT city, COUNT(*) AS company_count
FROM data.dataanalyst
GROUP BY city;
```
这段代码将返回一张表格,其中包含两个字段:一个是城市名字;另一个是对应的城市里有多少家公司存在。
#### 多个字段组合分组
除了单个字段外,还可以同时依据多列来进行更复杂的分类整理工作。需要注意的是,虽然不同的列顺序不会改变实际形成的分组情况,但却会影响输出结果呈现的方式[^2]:
```sql
SELECT department, position_level, AVG(salary) as avg_salary
FROM employees
WHERE salary IS NOT NULL
GROUP BY department, position_level;
```
此段脚本用于计算各部门各职位级别的员工薪资平均水平,并且保证只有那些拥有有效工资信息的人才会被纳入考量范围之内。
#### 条件筛选与过滤
有时候仅依靠基本形式不足以满足需求,这时可以通过添加额外约束条件进一步精确化目标对象的选择标准。比如只保留某些特殊情况下才符合条件的结果项。这里给出一个带有 `HAVING` 子句的例子来说明这一点[^3]:
```sql
SELECT industryField, COUNT(DISTINCT city) as distinct_cities
FROM data.dataanalyst
GROUP BY industryField
HAVING COUNT(IF(industryField LIKE '%电子商务%', 1, NULL)) >= 50;
```
上述指令旨在找出至少有五十个城市涉及“电子商务”行业的领域列表及其覆盖的不同城市总数目。
阅读全文