📅  最后修改于: 2023-12-03 15:25:02.045000             🧑  作者: Mango
在 SQL 中,子查询可以用于执行聚合函数。子查询聚合是指在查询中嵌套一个子查询,该子查询用于聚合计算,然后将结果作为外层查询的条件或显示结果。
子查询聚合的语法格式如下:
SELECT column1, column2, ..., aggregation_function(column_alias)
FROM table1
WHERE column IN (SELECT column3 FROM table2 WHERE condition);
以上语法中,table1
和 table2
是数据库中的两个表,column1
、column2
、column_alias
和 column3
是两个表中的列名,condition
是 table2
中的查询条件,aggregation_function
是聚合函数,例如 SUM
、AVG
、COUNT
等。
假设我们有一个包含商品销售数据的表 sales
,以及一个包含商品信息的表 products
,现在我们需要查询每个商品的销售总额、平均价以及销售数量。我们可以使用以下 SQL 语句实现:
SELECT
products.product_name,
SUM(sales.quantity * sales.unit_price) AS total_sales,
AVG(sales.unit_price) AS average_price,
COUNT(sales.sale_id) AS total_sales_qty
FROM
products
LEFT JOIN
sales ON products.product_id = sales.product_id
GROUP BY
products.product_name;
以上 SQL 语句使用了聚合函数 SUM
、AVG
和 COUNT
分别计算了销售总额、平均价和销售数量,并使用 GROUP BY
对商品名称进行分组。
接着,我们可以进一步根据每个商品的销售总额在一定范围之内进行筛选。例如,我们只需要查询销售总额大于 $1000 的商品。我们可以使用以下 SQL 语句实现:
SELECT
product_name,
total_sales,
average_price,
total_sales_qty
FROM
(
SELECT
products.product_name,
SUM(sales.quantity * sales.unit_price) AS total_sales,
AVG(sales.unit_price) AS average_price,
COUNT(sales.sale_id) AS total_sales_qty
FROM
products
LEFT JOIN
sales ON products.product_id = sales.product_id
GROUP BY
products.product_name
) AS sales_summary
WHERE
total_sales > 1000;
以上 SQL 语句在第一个 SELECT
语句中使用了子查询聚合,以获取每个商品的销售总额、平均价和销售数量。然后,在第二个 SELECT
语句中,我们筛选了销售总额大于 $1000 的商品。
子查询聚合是 SQL 中非常强大的功能之一,它可以让我们更加灵活地进行数据分析和筛选。需要注意的是,子查询聚合可能会降低查询性能,因此应该在实际使用中根据数据量和性能需求进行权衡。