MySQL DISTINCT呼叫按状态计数

时间:2019-03-20 16:36:22

标签: mysql sql duplicates distinct

我正在尝试按状态获取唯一呼叫计数(无重复呼叫)。例如...

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 个答案:

答案 0 :(得分:1)

您的措词不是很清楚,但是我想您是想说要计算每个州发生了多少个唯一的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