【问题标题】:Mysql Count Columns Greater Than 0Mysql Count Columns 大于 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。

【问题讨论】:

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

标签: mysql sql select group-by average


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-01-16
    • 2012-04-13
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多