【问题标题】:MySql group by with having clauseMySql group by with 子句
【发布时间】:2019-07-29 17:23:29
【问题描述】:

我有一个具有以下结构的表格消息

id   -  to_number     -  from_number  -  message       - send_to_podio_time
100  -  +16235708320  - +16232992010  -  test message1 - 2019-03-07 18:31:12
101  -  +16232992010  - +16235708320  -  test message2 - 2019-03-07 18:31:15
102  -  +16235708786  - +16232992010  -  test message3 - 2019-03-07 18:31:16
103  -  +16232992010  - +16235708786  -  test message4 - 2019-03-07 18:31:18

我需要获取两个电话号码之间的对话线程数 预期的输出是

phone_numbers              -  count
+16235708320:+16232992010  -   1
+16235708786:+16232992010  -   1

任何人都可以帮助我进行适当的查询吗?

【问题讨论】:

  • 但是 message1 和 message2 都在相同的数字之间。消息 3 和 4 类似,所以预期结果不应该在两行中都显示“2”吗?
  • @Sachem message1 和 message2 是黑白相同的数字(一个消息线程)。就像那个 message3 和 message4 是 b/w 另一个相同的数字(一个消息线程)。所以计数应该是1
  • 我不太明白。如果 +16235708320 回复“message2”,这个“1 个消息线程”如何? :)
  • 这是一个对话。相同电话号码之间的对话。我想分别进行每个对话。这就是我所需要的。 :(

标签: mysql group-by having sql-query-store


【解决方案1】:

试试:

SELECT CONCAT_WS(':', from_number, to_number), COUNT(*) 
FROM table_name
GROUP BY from_number, to_number;

这将显示 4 行作为结果,因为消息 1 和 2(以及类似地 3 和 4)之间的反向“顺序”将被分别处理。 但是由于您希望每一行的结果为“1”,也许这就是您要查找的内容?

【讨论】:

  • 前 2 行是同一个线程。所以应该算1。像接下来的2行
  • 你怎么知道是同一个线程,表中没有thread_id列?
  • 要实现您想要的,您应该分别查询“from”和“to”数字(不连接),然后您可以轻松地在循环中过滤掉“重复”。只需检查一对或反向对是否已经在最终数组中,如果是,则不要将其添加到其中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多