从和AVG开始SQL组

时间:2015-11-08 02:29:37

标签: sql

我正在尝试从我的表中名为clientstate和clientrevenue的两列中提取信息。我希望clientstate显示为状态,并且只有不同的名称,并且在客户收入下我想要每个州的平均收入,并且只有在该州至少有两个客户端时才会显示。我对此非常陌生,所以我所拥有的是非常好的:

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

我在哪里错了?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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中使用它。我们不能添加count(*),除非它在SELECT中使用。

因此,您需要将其添加为

之类的条件
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