使用另一个查询的结果从查询中获取数据是否可能

时间:2019-02-27 21:16:38

标签: sql tsql

enter image description here

假设我们有一个关于小部件生产的假设数据集,如上所述。第一列是w夫生产者的名称,第二列是他们生产了多少个小部件,第三列是他们正在运行的软件类型,最后一列是状态。 (我知道这是一个荒谬的例子)

让我们说些什么,我想要给定生产者的生产数量以及其统计信息中的平均数量

因此,假设我对生产者“ A”执行此操作,我想要的输出将如下所示:

enter image description here

基本上,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正在生效。

2 个答案:

答案 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