【问题标题】:MySql search ranking with criteriaMySql 搜索排名与标准
【发布时间】:2016-09-06 05:26:19
【问题描述】:

我有一个名为 customers 的表来保存客户的数据

id  | fname  | lname  
--- | ------ | ------  
 1  | John   | Smith
 2  | Mike   | Bolton
 3  | Liz    | John
 4  | Mark   | Jobs

我还有另一个名为 calls 的表,用于记录每个客户的每个呼叫。

id |     timestamp     | customer_id | campaign | answered |
 1 |2016-09-05 15:24:08|      1      |  2016-09 |     1    |
 2 |2016-09-05 15:20:08|      2      |  2016-09 |     1    |
 3 |2016-08-05 15:20:08|      2      |  2016-08 |     1    |
 4 |2016-08-05 13:20:08|      3      |  2016-08 |     1    |
 5 |2016-08-01 15:20:08|      3      |  2016-08 |     0    |
 5 |2016-08-01 12:20:08|      4      |  General |     1    | 

广告系列常规不计入计算。

我需要根据每个客户的通话记录,按照通话质量的排名来获得一个客户列表。

此列表用于呼叫客户,以便:

  • 尚未在实际通话活动中被调用(例如2016-09
  • 通话次数减少
  • 最佳接听百分比(接听电话总数/拨打电话总数)

它应该看起来像这样:

| id | fname  | lname | %ans | called actual campaign | total calls | rank |
|----|--------|-------|------|------------------------|-------------|------|
| 4  | Mark   | Jobs  | N/A  |          no            |      0      |   1  |
| 3  | Liz    | John  |  50  |          no            |      2      |   2  |
| 1  | John   | Smith | 100  |          yes           |      1      |   3  | No Show  
| 2  | Mike   | Bolton| 100  |          yes           |      2      |   4  | No Show  

请帮帮我!

【问题讨论】:

  • sqlfiddle 帮我们搞定?
  • 请包括您尝试自己解决问题的内容!
  • 你如何定义排名
  • @Drew 这里是 SQLFiddle sqlfiddle.com/#!9/d6accf/2
  • @1000111 小提琴交付

标签: mysql sql


【解决方案1】:

计算每个客户的总来电和指定活动的已接来电的查询

select 
    c.id,
    count(*) as total_calls,
    sum(case when answered=1 then 1 else 0 end) as answered_calls
from customer c
     join calls cs on c.id=cs.customer_id
where cs.campaign='2016-09'
group by c.id

那么就可以将上面的查询作为子查询来下单了

select sub.id, (@rank:=@rank+1) as rank
from (the subquery above) sub, (select @rank:=1)
order by 
  case when sub.total_calls=0 then 0 else 1,
  sub.total_calls, 
  sub.answered_calls*100/sub.total_calls

您可以在结果查询中包含任何所需的列

【讨论】:

  • 我试过了,但它给了我一个错误。每个派生表都必须有自己的别名,请查看sqlfiddle.com/#!9/d6accf/2
  • @JotaD 请尝试理解错误信息并进行更正,这并不难
  • @1000111 谢谢你的小提琴!有工作示例真的很棒。请将其发布为正确的工作答案。
  • 存在一些语法错误。我刚刚修好了。我没有做过什么特别的事情。而且我不知道查询是否正确。您可以编辑您的答案。 @StanislavL
  • @1000111 感谢您的帮助。它让我更好地理解了这一点。我更新了Fiddle,但现在我需要以下订购标准。 1) 没有显示在此广告系列中已接听电话的客户 2) 历史记录中根本没有电话 3) 广告系列中的电话较少且未接听 4) 已接听电话的百分比更高(历史已接听电话/历史电话给客户) 5) 订购方式有手机号码的客户。
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2011-11-15
  • 2012-07-02
  • 2010-11-02
相关资源
最近更新 更多