首页 > 解决方案 > 获取具有特定值的两个产品的总和

问题描述

我从表中选择产品时遇到问题。我还希望查询从该查询中选择所有产品的总和(如果它们具有特定值),例如:我想获取类型 = 1 或类型 = 2 的产品的价格总和。所以如果我有 100 个产品其中两个的类型 =1 或类型 =2,第一个产品的价格 = 10,另一个 = 25,然后我想从查询中获取值 =35。

SELECT

product.name,
product.type,
product.price

FROM product

有没有比制作单独的子查询更好的方法来做到这一点?上面的查询示例非常简单,我需要这个的实际情况是一个更大的查询,使用子查询将极大地影响性能。

标签: sqlsql-server

解决方案


您可以使用窗口函数。即使查询不使用分组,这也允许聚合所有返回的行。

SELECT
    product.name,
    product.type,
    product.price,
    SUM(product.price) OVER() TotalPrice
FROM product

窗口函数的真正强大之处在于您还可以返回子组的聚合,例如。包括每种类型的总价:

, SUM(product.price) OVER(PARTITION BY product.type) TotalPricePerType

这将显示 type=1、type=2 等所有行的总价。


推荐阅读