在 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()` 函數將每個學生的選課信息去重后收集到一個數組中。