2013-10-09 5 views
4

У меня есть база данных, такие как:Mysql граф Колонны больше 0

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.

+3

о, пожалуйста, нормализовать таблицу, эта конструкция ужасно. Это будет значительно проще с нормализованной таблицей. – Taryn

+2

stackoverflow должен создавать «sql denormalized» значки ... много вопросов об этом .. –

+3

@ RaymondNijland называет его «Аномальная проницательность» или, может быть, «Паранормальные переживания» – swasheck

ответ

2

Попробуйте это:

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; 
Смежные вопросы