2015-11-08 90 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