Количество вызовов MySQL DISTINCT по состоянию - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь получить уникальное количество звонков (без двойных звонков) по состоянию.Например ...

MO  249
OK  220
CA  216
TX  190
KS  158

Следующее работает (без ошибок), но не удаляет дубликаты.

SELECT DISTINCT CallFrom, FromState, count(*) AS cnt
FROM `calls`
WHERE DateCreated >= CURDATE() - INTERVAL 2 YEAR AND
(CallTo = '+15555555555' OR CallTo = '+15555555556' )
GROUP BY FromState
ORDER BY cnt DESC 

Есть идеи?Заранее спасибо.

ОБНОВЛЕНИЕ: был запрошен следующий пример таблицы вызовов:

Index   CallTo          CallFrom    FromState
1       +15555555555    18166283100 MO
2       +15555555556    13307059600 OH
3       +15555555555    17722631600 FL
4       +15555555556    16173024800 MA
5       +15555555556    16173024800 MA
6       +15555555556    16175025500 MA

Только что понял, что забыл включить столбец DateCreated, но, как я уже сказал, все работает, кроме дедупликации,Выход для этого примера будет ...

MA  2
MO  1
OH  1
FL  1

1 Ответ

1 голос
/ 20 марта 2019

Ваша формулировка не очень ясна, но я думаю, что вы говорите, что хотите подсчитать, сколько уникальных номеров CallFrom произошло в каждом штате. Возможно, есть лучшие способы сделать это, но это сработает. Сначала он создает список уникальных комбинаций CallFrom / State, а затем группирует и учитывает этот список вместо необработанных данных:

SELECT FromState, COUNT(*) 
FROM
  (SELECT DISTINCT CallFrom, FromState 
  FROM `calls` 
  WHERE 
    (CallTo = '+15555555555' OR CallTo = '+15555555556' )
  ) c 
GROUP BY FromState

Демо-версия: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d057e3482ec9d5ad4519e58056232e58

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...