假设我们有一个关于小部件生产的假设数据集,如上所述。第一列是w夫生产者的名称,第二列是他们生产了多少个小部件,第三列是他们正在运行的软件类型,最后一列是状态。 (我知道这是一个荒谬的例子)
让我们说些什么,我想要给定生产者的生产数量以及其统计信息中的平均数量
因此,假设我对生产者“ A”执行此操作,我想要的输出将如下所示:
基本上,SQL查询会动态地意识到生产者A在加利福尼亚,然后继续向我索取州的平均值。有可能吗?
我下面有第一部分,因为它很简单
Select Producer, Quantity, Type, State
FROM DataSource
WHERE Producer = A
我需要的是类似的东西
Select Producer, Quantity, State, *avg(FunctionStateofProducer(A))*, avg(FunctionSoftwareofProducer(A))*
FROM DataSource
WHERE Producer = A
我的一个想法是取每个州的平均值,然后按州和软件分组,但是当我尝试时:
Select Producer, Quantity, State, avg(output) as stateoutput, avg(output) as softwareoutput
FROM DataSource
WHERE Producer = A
GROUP BY State, Type
两个平均列的输出是相同的,因此看起来只有第一个GROUP BY正在生效。
答案 0 :(得分:1)
您提到您正在使用T-SQL,因此可以使用窗口函数的魔力:
SELECT Producer,
Quantity,
Type,
State,
AVG(Output) OVER (PARTITION BY State) AS AverageOutputForState,
AVG(Output) OVER (PARTITION BY Type) AS AverageOutputForSoftware
FROM DataSource
如果您以脚本的形式提供DDL和示例数据,以及完整的期望结果,我们可以进行一些测试。
HTH
答案 1 :(得分:-1)
我了解到,您希望在两个单独的列中添加每个州和生产者的平均值。
select ds.producer, ds.quantity, ds.type, ds.state,
st.avg_q_st, pr.avg_q_pr
from datasource ds
left join (
select state, avg(quantity) as avg_q_st
from datasource group by state
) st on ds.state = st.state
left join (
select producer, avg(quantity) as avg_q_pr
from datasource group by producer
) pr on ds.state = pr.state