Mysql Count Columns 大于 0

Posted

技术标签:

【中文标题】Mysql Count Columns 大于 0【英文标题】:Mysql Count Columns Greater Than 0 【发布时间】:2013-10-17 12:26:43 【问题描述】:

我有一个数据库,例如:

USER   12am 1am 2am 3am 4am 5am 6am 7am 8am 9am 10am 11am 12pm
--------------------------------------------------------------
user1   5    0   6   7   8   0   9   0   0   0   0    0    0

我想要所有列的平均值。 我可以轻松地将列相加,但我想计算值大于 0 的列。 在这种情况下,它将是 5。 这样我就可以除以 35/5 得到 7。

【问题讨论】:

哦,请标准化你的表,这个设计太糟糕了。使用规范化表格会更容易。 *** 应该创建“sql 非规范化”徽章...关于这个问题很多.. @RaymondNijland 称其为“异常洞察力”或“超自然体验” 与在列中求和的方式相同,但添加 IF(val1>0,1,0)+(val2>0,1,0) +...... 我猜无需提及规范化。 @bluefeet 然而......你可以使用 UNPIVOT of Justice and Restoration 【参考方案1】:

试试这个:

SELECT a.user, 
        (
             (a.12am + a.1am + a.2am + a.3am + a.4am + a.5am + a.6am + a.7am + a.8am + a.9am + a.10am + a.11am + a.12pm) 
            / 
             (IF(a.12am > 0, 1, 0) + 
              IF(a.1am > 0, 1, 0) + 
              IF(a.2am > 0, 1, 0) + 
              IF(a.3am > 0, 1, 0) + 
              IF(a.4am > 0, 1, 0) + 
              IF(a.5am > 0, 1, 0) + 
              IF(a.6am > 0, 1, 0) + 
              IF(a.7am > 0, 1, 0) + 
              IF(a.8am > 0, 1, 0) + 
              IF(a.9am > 0, 1, 0) + 
              IF(a.10am > 0, 1, 0) + 
              IF(a.11am > 0, 1, 0) + 
              IF(a.12pm > 0, 1, 0)
             )
        )
FROM tableA a 
GROUP BY a.user;

【讨论】:

以上是关于Mysql Count Columns 大于 0的主要内容,如果未能解决你的问题,请参考以下文章

mysql count() 每列的行条目大于 0

MySQL - Row size too large (> 8126). Changing some columns to TEXT or BLOB

MySQL - Row size too large (> 8126). Changing some columns to TEXT or BLOB

mysql查询部门人数大于所有部门平均人数的部门

MYSQL IF SELECT COUNT() 大于零 select * from table else return nothing found

MySQL count(*) 性能优化