2009-10-15 26 views
13

chciałbym wiedzieć, czy mogę uzyskać średnią kwotę w jednym wniosku SQL Server,Średnia sumy w jednym zapytaniu

próbowali zrobić z następującym wniosku, ale to nie działa :

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

Próbujesz dostać AVG aktywów klientów? – Gratzy

+0

Średnia suma aktywów każdego klienta – Roch

Odpowiedz

25

Myślę, że kwestia wymaga trochę wyjaśnień. Jeśli chcesz wziąć sum pogrupowane według t.client można użyć:

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

Następnie, jeśli chcesz wziąć średnią z tego Süme, po prostu zrobić:

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 

Nie można jednak grupa zapytanie zewnętrzne, ponieważ da to wyniki podobne do pierwszego zapytania. Wyniki z zapytania wewnętrznego są już pogrupowane według t.client.

+0

co to jest? po ostatnim Parenthese? – Roch

+0

To jest pseudonim wewnętrznego zapytania. Każde zapytanie wewnętrzne musi mieć nazwę. –

+2

Myślę, że musisz zmienić avg (t.asset) na avg (inner_query.asset) – Gratzy

4

Jeśli próbujesz uzyskać średnie aktywa klientów, myślę, że użyłbym na CTE. Można spróbować, jeśli SQL 2005 lub większy

EDIT: zajęła drugie grupę, jako Myślę, że chcesz tylko jeden wynik tutaj aktywów średnich

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

Jego bardzo proste

dla ex.

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

w „średniej” otrzymasz średnio „t.asset”

+0

Wow, doskonały przykład znacznie prostszego rozwiązania. Czasami kocham matematykę! –

Powiązane problemy