【问题标题】:Dividing a SUM with a Count returns false results将 SUM 与 Count 相除会返回错误结果
【发布时间】:2014-08-29 17:42:29
【问题描述】:

所以我对 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 个表?如果是,则错误:尝试SELECT SUM(ACCOUNT_COUNT), COUNT(IS_TERMINATED) , SUM(ACCOUNT_COUNT) / COUNT(IS_TERMINATED) FROM T_APPLICATIONS, V_USERS WHERE RESOURCE_TYPE='A'; 以查看计算出的值。
  • IS_TERMINATED where RESOURCE_TYPE = 'A' 的总和是多少?

标签: mysql sql


【解决方案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)

【讨论】:

  • 没有加入的钥匙,但第二个答案创造了奇迹!谢谢!
【解决方案2】:

你在不同的查询中得到了正确的值,但是在不正确的查询中,你连接了两个表(基本上,你交叉连接它们)。

如果您分别选择总和和计数,但在您的第一个查询中:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2023-02-15
    • 2013-02-06
    相关资源
    最近更新 更多