group

时间:2025-02-12 23:30:32 主机游戏

`GROUP BY` 是 SQL 中的一个重要子句,用于将结果集按照一个或多个列进行分组,并对每个分组应用聚合函数(如 `SUM()`, `COUNT()`, `AVG()`, `MAX()`, `MIN()` 等)。以下是一些 `GROUP BY` 的基本用法和高级用法:

基本用法

单个列分组

```sql

SELECT column_name, AGGREGATE_FUNCTION(column_name)

FROM table_name

GROUP BY column_name;

```

多个列分组

```sql

SELECT column1, column2, ..., AGGREGATE_FUNCTION(column_name)

FROM table_name

GROUP BY column1, column2, ...;

```

过滤分组结果

使用 `HAVING` 子句过滤分组结果:

```sql

SELECT column1, column2, ..., AGGREGATE_FUNCTION(column_name)

FROM table_name

WHERE condition

GROUP BY column1, column2, ...

HAVING AGGREGATE_FUNCTION(column_name) > value;

```

使用聚合函数和非聚合列进行分组

可以在 `SELECT` 语句中包含非聚合列:

```sql

SELECT column1, aggregate_function(column) as aggregate_value

FROM table_name

WHERE condition

GROUP BY column1;

```

使用 `WITH CUBE` 语句

`WITH CUBE` 语句可以生成多维数据集,包含所有可能的列组合的聚合结果:

```sql

SELECT sup_id, prod_id, sum(qty*unit_price) as tot_amt

FROM sale_item

GROUP BY sup_id, prod_id WITH CUBE;

```

使用 `WITH ROLLUP` 语句

`WITH ROLLUP` 语句返回最高层次的 `GROUP BY` 列的加总,以及每个分组的加总:

```sql

SELECT sup_id, prod_id, sum(qty*unit_price) as tot_amt

FROM sale_item

GROUP BY sup_id, prod_id WITH ROLLUP;

```

区分 `CUBE` 操作生成的空值

使用 `GROUPING` 函数区分 `CUBE` 操作生成的空值和实际数据中的空值:

```sql

SELECT productid, grouping(productid), orderid, grouping(orderid), sum(quantity)

FROM order

GROUP BY productid, orderid WITH CUBE

ORDER BY productid, orderid;

```

与 `HAVING` 子句搭配使用

找出每个组别中满足指定条件的数据:

```sql

SELECT prod_id, count(*)

FROM stock

GROUP BY prod_id

HAVING count(*) > 1

ORDER BY prod_id;

```

这些用法涵盖了 `GROUP BY` 的基本和高级功能,可以根据具体需求选择合适的用法进行数据分组和聚合操作。