Как можно подсчитать количество звонков из базы данных MySQL по конкретным направлениям?

Добрый день. <br/> У меня есть SQL-запрос следующего вида: <br/> <pre><code>SELECT calldate as "Время звонка",cnam as "Кто звонил", cnum as "Вн.номер", dst as "Куда звонили",disposition as "Статус", dstchannel as "Через какой номер", duration as "Длительность звонка/с"
from cdr
where ($__timeFilter(calldate)) and (dst not like 's') and (dst not like 'T') and (dst like '810%') and (length(dst)&gt;4)
ORDER BY calldate DESC</code></pre> <br/> Этот запрос выводит данные о звонках из базы данных asteriskcdrdb. <br/> Могли бы вы помочь мне изменить запрос таким образом, чтобы он отображал количество звонков за день?
  • 18 февраля 2025 г. 12:14
Ответы на вопрос 1
Для того чтобы изменить ваш SQL-запрос и получить количество звонков за день, вы можете использовать агрегатную функцию `COUNT()` вместе с `GROUP BY`. Вам также нужно указать, какую дату вы хотите анализировать. Например, можно использовать `DATE(calldate)` для группировки по дате.

Вот пример, как можно изменить ваш запрос:

```sql
SELECT DATE(calldate) as "Дата",
       COUNT(*) as "Количество звонков"
FROM cdr
WHERE ($__timeFilter(calldate)) 
  AND (dst NOT LIKE 's') 
  AND (dst NOT LIKE 'T') 
  AND (dst LIKE '810%') 
  AND (LENGTH(dst) > 4)
GROUP BY DATE(calldate)
ORDER BY DATE(calldate) DESC;
```

### Объяснение изменений:
1. **Агрегация данных:** Используем `COUNT(*)` для подсчета числа звонков.
2. **Группировка по дате:** `GROUP BY DATE(calldate)` позволяет сгруппировать результаты по дате, что позволяет подсчитывать количество звонков за каждый день.
3. **Сортировка:** В ORDER BY добавлено упоминание колонки `DATE(calldate)` чтобы отсортировать результаты по дате.

Этот запрос вернёт количество звонков за каждый день в рамках диапазона времени, определяемого вашим `$__timeFilter(calldate)`.
Похожие вопросы