Как включить ноль при подсчете с выражением MySQL GROUP BY - PullRequest
4 голосов
/ 25 мая 2011

Я хотел бы подсчитать число событий, которые происходят в каждый день за последний месяц, , но также включать ноль, если не найдено ни одного события .Это возможно?

Вот с чего я начинаю ...

SELECT COUNT(*) AS count, 
DATE(usage_time_local) AS d 
FROM usages 
WHERE user_id=136 
AND DATE(usage_time_local) >= DATE('2011-04-24') 
AND DATE(usage_time_local) <= DATE('2011-05-24') 
GROUP BY DATE(usage_time_local);

ОБНОВЛЕНИЕ: Получив ответ, я реализовал решение кода, инициализировав цикл и заполнив детали.

  $dailyCount = array();
  for( $i=1; $i<=30; $i++ ) {
      $day = date('Y-m-d',(time()-($i*24*60*60)));
      $dailyCount[$day] = 0;
  }
  foreach( $statement as $row ) {
    $dailyCount[$row['d']] = $row['count'];
  }

1 Ответ

8 голосов
/ 25 мая 2011

Вы не можете сделать это со стандартными запросами SQL - вы пытаетесь сгруппировать по датам, которых нет в таблице.

Стандартный обходной путь - создать временную таблицукоторый содержит диапазон дат в последовательном порядке без пробелов, присоедините его к таблице и выполните подсчет / агрегирование, как обычно.

...