在 SQL 中,`COLLECT_SET()` 函数用于将分组内的多个值去重后收集到一个集合(array)中。这个函数通常与 `GROUP BY` 子句一起使用,以对每个分组执行某种操作。
`COLLECT_SET()` 函数的语法如下:
```sql
COLLECT_SET(expr) OVER (PARTITION BY partition_expression, ... [ORDER BY sort_expression [ASC | DESC], ...])
```
- `expr`:需要收集的列或表达式的值。
- `PARTITION BY partition_expression, ...`:指定分组的列或表达式。
- `ORDER BY sort_expression [ASC | DESC], ...`:(可选)指定集合内元素的排序顺序。
以下是一个简单的示例来说明 `COLLECT_SET()` 函数的用法:
假设我们有一个名为 `students` 的表,其中包含学生的姓名和选课信息:
| id | name | course |
|----|-------|--------|
| 1 | Alice | Math |
| 2 | Alice | English|
| 3 | Bob | Math |
| 4 | Bob | Science|
| 5 | Carol | English|
我们想要找出每个学生所选的课程列表,可以使用以下查询:
```sql
SELECT name, COLLECT_SET(course) as courses
FROM students
GROUP BY name;
```
查询结果如下:
| name | courses |
|-------|------------------|
| Alice | ["Math", "English"]|
| Bob | ["Math", "Science"]|
| Carol | ["English"] |
在这个例子中,`COLLECT_SET()` 函数将每个学生的选课信息去重后收集到一个数组中。