将SUM与Count分开会返回false结果

时间:2014-08-29 09:39:24

标签: mysql sql

所以我对SQL很新,但在遇到以下问题之前一直没问题。 我想要的是一个语句,它获取ACCOUNT_COUNT列的SUM,而不是将其与IS_TERMINATED列中的COUNT分开。

到目前为止,我已尝试过以下内容:

SELECT SUM(ACCOUNT_COUNT) / COUNT(IS_TERMINATED) FROM T_APPLICATIONS, V_USERS WHERE RESOURCE_TYPE='A';

返回:

  

1.36714285714285714285714285714285714286E02

虽然它应该返回:

  

5.06349206349206349206349206349206349206E00

如果我尝试单独获取SUM和COUNT值,则返回正确的值

SELECT COUNT(IS_TERMINATED) FROM V_USERS;

返回:

  

189

SELECT SUM(ACCOUNT_COUNT) FROM T_APPLICATIONS WHERE RESOURCE_TYPE='A';

返回:

  

957

957 / 189 = 5.06349206349206349206349206349206349206E00

我不知道我做错了什么..任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:1)

你忘了加入你的桌子。

试试这个:

SELECT SUM(ACCOUNT_COUNT) / COUNT(IS_TERMINATED) 
FROM T_APPLICATIONS x inner join V_USERS v ON x.ID = v.ID
 WHERE RESOURCE_TYPE='A';

如果您没有加入密钥,请尝试以下方法:

SELECT
  (SELECT SUM(ACCOUNT_COUNT) FROM T_APPLICATIONS WHERE RESOURCE_TYPE='A') /
  (SELECT COUNT(IS_TERMINATED) FROM V_USERS)

答案 1 :(得分:1)

您可以在不同的查询中获得正确的值,但在不正确的查询中,您可以加入这两个表(基本上,您可以交叉加入它们)。

如果您在第一个查询中单独选择总和和计数,则可以看到它出错:

SELECT 
  SUM(ACCOUNT_COUNT), 
  COUNT(IS_TERMINATED) 
FROM 
  T_APPLICATIONS, V_USERS WHERE RESOURCE_TYPE='A';

现在,要修复它,只需将两个子查询嵌入到选择中:

SELECT
  (SELECT SUM(ACCOUNT_COUNT) FROM T_APPLICATIONS WHERE RESOURCE_TYPE='A') /
  (SELECT COUNT(IS_TERMINATED) FROM V_USERS)