2012-02-14 153 views
-1

如何在SQL Server中執行sum(a)/sum(b)查詢?如何在SQL Server中執行sum(a)/ sum(b)查詢?

我有子查詢與a = sum(...)b = count(...)。我需要爲主查詢中的子查詢中的所有記錄計算avg(all)。它是avg(all) = sum(a)/sum(b)。但是SQL Server不允許這個表達式。如何計算它?主查詢中記錄的數量不能更改。

非常感謝您的幫助!

select 
    sum(a)/sum(b) as avg_x 
from 
    (
    select 
    sum(x) as a, 
    count(x) as b 
    from 
    xyTable 
    group by 
    y 
) 
group by 
    <any_columns> 

錯誤是:

不能對包含聚合或子查詢表達式 執行聚合功能。

+2

顯示整個查詢 – 2012-02-14 22:22:35

+0

已添加簡化查詢。 – Dmitry 2012-02-14 22:31:07

+0

如果你自己運行子查詢,你會得到正確的數據嗎?另外,確切的錯誤信息是什麼?發佈前請閱讀[常見問題]和[問]。 – 2012-02-14 22:37:11

回答

0

sum(a)/sum(b)通過MSSQL是可接受的。問題出現在查詢的另一部分:sum(min(a))

+0

請刪除此問題並重新發布正確的問題,然後 – 2012-02-15 00:23:38

2

爲什麼不

select 
avg(x) as avg_x 
from 
xyTable 
group by 
y 
+0

查詢已簡化。不能這樣做。 – Dmitry 2012-02-14 23:02:47

+1

然後請向我們展示一個查詢,正確說明爲什麼這不是一個選項。我們無法有效幫助您,而無需瞭解您正在使用的一組約束條件。 – 2012-02-14 23:05:49

0

由於@克里斯說 - 它會如果你發佈一個代表查詢幫助。

簡而言之,我會指出,你可以通過用表變量替換子查詢/ cte /你有什麼包含當前子查詢的結果,查詢。

即:

---create the table variable @myTable 
---then SELECT sum(a)/sum(b) from @myTable...