Как я могу вычислить среднее значение полей и исключить 0 значений - PullRequest
1 голос
/ 21 июня 2020

У меня есть это:

SELECT
    ROUND(AVG(coffee)) 'coffee',
    ROUND(AVG(cappucino)) 'cappucino',
    ROUND(AVG(espresso)) 'espresso',
    ROUND(AVG(machine)) 'machine'
    FROM `reviews` ORDER BY `username`

Моя таблица выглядит так:

+-----+-----------+---------------+---------------+---------------+---------------+
| id  | name      | coffee        | cappucino     | espresso      | machine       |
+-----+-----------+---------------+---------------+---------------+---------------+
|  1  | Joe       | 5             | 4             | 5             | 4             |
|  2  | Jane      | 3             | 5             | 2             | 5             |
|  3  | Mike      | 0             | 0             | 0             | 5             |
+-----+-----------+---------------+---------------+---------------+---------------+

Мне нужно среднее значение отзывов, но Майк не пьет кофе, и он нажал кнопку " Не применяется кнопка ". Таким образом, текущее среднее значение:

coffee 2.66666667
cappucino 3
espresso 2.33333333
machine 4.66666667

Но должно быть:

coffee 4
cappucino 4.5
espresso 3.5
machine 4.66666667

Как я могу это выяснить?

Ответы [ 3 ]

1 голос
/ 21 июня 2020

NULL значения игнорируются AVG, как и AVG(NULLIF(coffee,0)). Или сначала сохраните NULL вместо 0.

0 голосов
/ 21 июня 2020

Это было исправление:

SELECT
    ROUND(AVG(NULLIF(coffee,0))) 'coffee',
    ROUND(AVG(NULLIF(cappucino,0))) 'cappucino',
    ROUND(AVG(NULLIF(espresso,0))) 'espresso',
    ROUND(AVG(NULLIF(machine,0))) 'machine'
    FROM `reviews` ORDER BY `username`
0 голосов
/ 21 июня 2020

Это определенно отличный вопрос. Я нашел решение.

 select avg(coffee) from data where coffee>0 union select avg(cappucino) from data where cappucino >0 union select avg(expresso) from data where expresso>0 union select avg(machine) from data where machine>0;

Попробуйте это. Я вычисляю средние значения всех полей отдельно, используя условие where, что значение в поле должно быть больше 0, а затем я показываю UNION всех запросов.

Это будет вывод ... To избегайте использования avg (coffee) в качестве заголовка столбца, вы можете использовать ALIAS.

+-------------+
| avg(coffee) |
+-------------+
|      4.0000 |
|      4.5000 |
|      3.5000 |
|      4.6667 |
+-------------+

Надеюсь, это было полезно.

...