【问题标题】:MYSQL: Get average of fields in case where value is not a certain valueMYSQL:在值不是某个值的情况下获取字段的平均值
【发布时间】:2014-06-29 08:05:16
【问题描述】:

假设我有一个 5 列的表,

A、B、C、D、E

是整数。在这种情况下,我想获得所有字段的平均值,而不是 3。

所以,在一些示例数据上:

A, B, C, D, E         DESIRED RESULT
-------------
1, 1, 4, 4, 3       -> 2.5 (NOT 2.6)
1, 2, 3, 3, 3       -> 1.5 (NOT 2.4)

编辑:我找到了解决方案。

(
   (
    IF(A!=3,A,0)
   +IF(B!=3,B,0)
   +IF(C!=3,C,0)
   +IF(D!=3,D,0) 
   +IF(E!=3,E,0)
   ) 
   /
   (
    IF(A!=3,1,0)
   +IF(B!=3,1,0)
   +IF(C!=3,1,0)
   +IF(D!=3,1,0)
   +IF(E!=3,1,0)
   )
) as VALUE

【问题讨论】:

标签: mysql sql average


【解决方案1】:

试试看:

  select avg(CASE WHEN A = 3 then 0 else A end +
             CASE WHEN B = 3 then 0 else B end +
             CASE WHEN C = 3 then 0 else C end +
             CASE WHEN D = 3 then 0 else D end +
             CASE WHEN E = 3 then 0 else E end)/
         (CASE WHEN A = 3  then 0 else 1 end +
          CASE WHEN B = 3  then 0 else 1 end +
          CASE WHEN C = 3  then 0 else 1 end +
          CASE WHEN D = 3  then 0 else 1 end +
          CASE WHEN E = 3  then 0 else 1 end) as av from table1
  group by A,B,C,D,E

DEMO HERE

【讨论】:

  • 感谢您的帮助!
  • 如果你用 IF 语句做同样的想法。
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多