2015-11-08 93 views
0

我想從我的表中標題爲clientstate和clientrevenue的兩列中提取信息。我希望clientstate顯示爲狀態,並且只有不同的名稱,並且在客戶收入下,我希望每個州的平均收入,並且只有當該州至少有兩個客戶時纔會顯示。我非常新,所以我有很多iffy:開始SQL組和由AVG

SELECT clientstate, clientrevenue 
FROM client 
GROUP BY clientrevenue 
HAVING COUNT (*) >=2; 

我在哪裏錯了?

回答

0
SELECT clientstate AS [State] 
    , AVG(clientrevenue) AS [Average Revenue] 
FROM client 
GROUP BY clientstate 
+0

當我寫錯誤「您的查詢不包括指定表達式‘clientstate’作爲一個聚集函數的一部分。這是什麼意思? – Jeff

+0

真棒,謝謝!另外一個部分,我怎麼才能讓它拉到至少有兩個客戶端的狀態? – Jeff

+0

沒關係,只是想通了。謝謝@ M. Ali! – Jeff

0

通過ClientRevenue進行分組將嘗試對相似的值進行分組,並且不具有邏輯意義。

首先,爲了獲取不同的狀態,需要在GROUP BY語句中使用clientstate列。

因此,代碼如下:

SELECT clientstate, AVG(clientrevenue) 
FROM Source_Table 
GROUP BY clientstate --this would get you distinct states 

現在,考慮每個國家的2個客戶端,這是不是一個HAVING語句的條件。 HAVING語句根據您正在使用的聚合函數來限制查詢結果。例如,在上述代碼中,聚合函數是AVG(clientrevenue)。所以,我們只能在HAVING中使用它。除非在SELECT中使用,否則我們不能添加count(*)。

所以,你需要將其添加爲條件像

SELECT clientstate, AVG(clientrevenue) 
FROM Source_Table A 
WHERE (SELECT count(DISTINCT client_ID) FROM Source_Table B 
     WHERE A.clientstate = B.clientstate) >= 2 --Condition 
GROUP BY clientstate --this would get you distinct states