2009-10-15 32 views
13

Tôi muốn biết nếu tôi có thể nhận được mức trung bình của một khoản tiền trong một yêu cầu SQL SERVER duy nhất,Avg của một Sum trong một truy vấn

đã cố gắng để làm điều đó với các yêu cầu sau đây nhưng nó không hoạt động :

SELECT t.client, 
     AVG(SUM(t.asset)) AS Expr1 
    FROM TABLE t 
GROUP BY t.client 
+0

Bạn đang cố gắng để có được trung bình của khách hàng tài sản? – Gratzy

+0

Mức trung bình của tổng tài sản của mỗi khách hàng – Roch

Trả lời

25

Tôi nghĩ rằng câu hỏi của bạn cần một chút giải thích. Nếu bạn muốn để có những khoản tiền được phân nhóm theo t.client bạn có thể sử dụng:

SELECT t.client, SUM(t.asset) 
FROM the-table t 
GROUP BY t.client 

Sau đó, nếu bạn muốn lấy trung bình của nguyên tắc hoạt động này, chỉ cần thực hiện:

SELECT AVG(asset_sums) 
FROM 
(
    SELECT t.client, SUM(t.asset) AS asset_sums 
    FROM the-table t 
    GROUP BY t.client 
) as inner_query 

Bạn không thể tuy nhiên nhóm truy vấn bên ngoài, bởi vì điều này sẽ cho bạn kết quả như trong truy vấn đầu tiên. Kết quả từ truy vấn bên trong đã được nhóm theo t.client.

+0

là gì? sau Parenthese cuối cùng? – Roch

+0

Đó là biệt danh cho truy vấn bên trong. Mỗi truy vấn bên trong phải có tên. –

+2

Tôi nghĩ bạn cần thay đổi avg (t.asset) thành avg (inner_query.asset) – Gratzy

4

Nếu bạn đang cố gắng lấy tài sản trung bình của khách hàng tôi nghĩ mình sẽ sử dụng tại CTE. Bạn có thể thử nếu sql 2005 hoặc lớn hơn

EDIT: Took nhóm thứ hai bằng cách ra như tôi nghĩ rằng bạn muốn chỉ là một kết quả ở đây tài sản trung bình

With clientsum (client,assets) 
as 
(
    SELECT  CLIENT, SUM(asset) AS assets 
    FROM   CLIENTTABLE 
    GROUP BY CLIENT 
) 
SELECT avg(assets) AS Expr1 
FROM clientsum 
7

Rất đơn giản

cho ví dụ:

SELECT t.client, 
     SUM(t.asset)/count(t.asset) AS average 
    FROM TABLE t 
GROUP BY t.client 

trong "trung bình" bạn sẽ nhận được trung bình "t.asset"

+0

Wow, ví dụ hoàn hảo của một giải pháp dễ dàng hơn nhiều. Đôi khi tôi yêu toán học! –

Các vấn đề liên quan