我试图找出是否有任何方法来汇总每种产品的销售额。我意识到我可以通过使用group-by子句或通过编写一个过程来实现它。 例如:
Table name: Details
Sales Product
10 a
20 a
4 b
12 b
3 b
5 c
是否有可能在不使用逐个查询的情况下执行以下查询
select
product,
sum(sales)
from
Details
group by
product
having
sum(sales) > 20
我意识到可以使用过程,可以用其他任何方式完成吗?
答案 0 :(得分:3)
你可以做到
SELECT product,
(SELECT SUM(sales) FROM details x where x.product = a.product) sales
from Details a;
(并将其包装到另一个选择中以模拟HAVING
)。
答案 1 :(得分:1)
可以使用分析函数进行求和计算,然后用另一个查询对其进行包装以进行过滤。
See and play with the example here.
select
running_sum,
OwnerUserId
from (
select
id,
score,
OwnerUserId,
sum(score) over (partition by OwnerUserId order by Id) running_sum,
last_value(id) over (partition by OwnerUserId order by OwnerUserId) last_id
from
Posts
where
OwnerUserId in (2934433, 10583)
) inner_q
where inner_q.id = inner_q.last_id
--and running_sum > 20;
我们在所有者(产品)的分区上保留一个运行总和,并且我们计算同一窗口的最后一个ID,这是我们用来获得总和的ID。用另一个查询包装它以确保你得到"最后一个id",取总和,然后对结果进行任何你想要的过滤。
这是避免使用GROUP BY的极其圆润的方法。
答案 2 :(得分:-1)
如果您不想要嵌套的select语句(运行速度较慢),请使用CASE:
select
sum(case
when c.qty > 20
then c.qty
else 0
end) as mySum
from Sales.CustOrders c