MySQL на условно - PullRequest
       8

MySQL на условно

9 голосов
/ 15 ноября 2011

возможно ли получить среднее значение для столбца, а также среднее значение для того же столбца с условным условием?или просто объединить эти два запроса в один.

SELECT AVG( field ) from table

SELECT AVG ( field ) from table where col = some_val

Если не существует простого способа объединить их с помощью собственных функций mysql, сможет ли хранимая функция обработать его или пользовательскую функцию

Ответы [ 2 ]

24 голосов
/ 15 ноября 2011

Используя тот факт, что значения null не включены в агрегатные функции, мы можем использовать оператор CASE для управления средним значением, как показано ниже:

select avg(amt) as average,
       avg(case when col=some_val then amt else null end) as conditionalAverage
  from myTable;

Пример демонстрации: http://sqlize.com/2IXwbWD2Eb

9 голосов
/ 25 ноября 2014

Есть другой способ, не использующий случай, когда

select 
   avg(amt) as average, 
   avg(if(col=some_val,amt,null)) as conditionalAverage
 from myTable
...