【问题标题】:Why does the total from my query results not add up?为什么我的查询结果的总数没有加起来?
【发布时间】:2012-08-01 13:04:02
【问题描述】:

我有三个从数据库中获取统计信息的查询,但我的结果总计不正确。如果我自己算算的话,我会得到:// 440728 / 1128 = 390.72

但是,以下是我的查询返回的内容:

SELECT * FROM facebook_accts
         WHERE user_id IN (SELECT id FROM  `user_accts` WHERE owner_id = '121') 
// returns 1128

SELECT sum(friend_count) FROM facebook_accts
                         WHERE user_id IN
                            (SELECT id FROM  `user_accts` WHERE owner_id = '121') 
// returns 440728

SELECT avg(friend_count) FROM facebook_accts
                         WHERE user_id IN
                            (SELECT id FROM  `user_accts` WHERE owner_id = '121') 
// returns 392.11 (number formatted to two decimal places by php)

【问题讨论】:

  • 你能发布数据类型的表结构吗?
  • 你有SELECT * FROM facebook_accts。我确定你的意思是SELECT COUNT(friend_count) FROM facebook_accts
  • 您有 4 条记录,根本没有好友数(甚至为零)。所以平均值计算为440728/(1128-4)
  • friend_count 可以为空,@Smandoli 我计算返回的行数..

标签: mysql sql


【解决方案1】:

这可能是因为friend_count 列有一些NULL 值,因为SUMAVG 函数忽略了NULL 值。见here

【讨论】:

  • 有没有办法将这些包含在 avg 函数中?
  • IFNULL(0,SUM(friend_count)) ...假设你的空值应该被视为零。
  • AVG(ISNULL(friend_count),0)
【解决方案2】:

我猜这 1128 行包含 NULL 值(AVG 和 SUM 忽略)。

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 2011-11-07
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多