📜  使用 Joins 和 Over 子句在 SQL 中组合聚合值和非聚合值(1)

📅  最后修改于: 2023-12-03 15:06:47.835000             🧑  作者: Mango

使用 Joins 和 Over 子句在 SQL 中组合聚合值和非聚合值

在 SQL 中,我们经常需要将聚合值和非聚合值组合在一起进行操作,这就需要使用 Joins 和 Over 子句。

Joins

Joins 是将两个或多个表中的数据根据某个条件连接在一起的操作。在连接表时,我们将使用的是一个被连接的表,这个表包含了聚合值,而另一个表则包含了非聚合值。

下面是一个示例,用来说明如何在 SQL 中进行 Joins 连接:

SELECT orders.order_number, customers.customer_name, SUM(order_items.quantity)
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
JOIN order_items ON orders.order_id = order_items.order_id
GROUP BY orders.order_number, customers.customer_name;

在这个示例中,我们连接了三个表:orders、customers 和 order_items。我们选择了 orders.order_number、customers.customer_name 和 order_items.quantity 这三个字段,其中 orders.order_number 和 customers.customer_name 是非聚合字段,而 order_items.quantity 是聚合值。

我们使用 GROUP BY 来指定我们想要对哪些字段进行聚合。因为我们需要对 orders.order_number 和 customers.customer_name 进行 GROUP BY,所以我们将这两个字段添加到 SELECT 语句中。

Over

Over 是一个用于在 SQL 中进行分组操作的关键字。我们通常使用 Over 来计算每个组的聚合值。与 Joins 不同,Over 是针对单个表的操作。

下面是一个示例,用来说明如何在 SQL 中使用 Over 子句进行分组操作:

SELECT customers.customer_name, orders.order_number, SUM(order_items.quantity) OVER (PARTITION BY orders.customer_id)
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
JOIN order_items ON orders.order_id = order_items.order_id;

在这个示例中,我们选择了 customers.customer_name、orders.order_number 和 order_items.quantity 这三个字段。orders.customer_id 是被用于连接表,而 order_items.quantity 是我们要计算的聚合值。

我们使用 OVER 关键字来指定我们想要进行聚合的字段。我们使用 PARTITION BY 来指定我们想要将数据分组的字段。在本例中,我们想要将数据按照 customers 表中的 customer_id 字段进行分组,所以我们将 PARTITION BY orders.customer_id 添加到了 OVER 子句中。

总结

使用 Joins 和 Over 子句能够让我们在 SQL 中非常方便地组合聚合值和非聚合值。我们可以使用 Joins 连接多个表中的数据,然后使用 GROUP BY 来对数据进行聚合。我们也可以使用 Over 在单个表中进行分组操作,然后计算每个组的聚合值。这些操作都能够让我们更加高效地使用 SQL 进行数据操作。