计算特定时间段的净推荐值

时间:2017-10-31 00:06:54

标签: mysql

我需要转换数据,因此它会进入我的BI软件。我在互联网上找到了以下查询来计算净推荐分数(NPS),但是存在问题 - 它会计算所有数据并忽略WHERE语句,我会尝试指定年份和月份。这意味着它需要所有年份的所有行并输出它们的计算结果。

.as-console-wrapper { max-height: 100% !important; top: 0; }

注意:Net Promoter System是一项客户体验调查,询问的评分范围为0到10(含)。计算方法如下: ((回复10或9的人数)/所有回复 - (回复0-6的人数)/所有回复)* 100

1 个答案:

答案 0 :(得分:0)

一些事情。

首先,使用

 WHERE Survey_Response_Created_Date >= '2017-10-01'
   AND Survey_Response_Created_Date <  '2017-11-01'

获取2017年10月的所有回复。这可以利用您列上的索引。

其次,为了确保您了解您的数据,请先尝试制作详细子查询,然后对其进行总结。例如,首先获取详细信息(IF比CASE更容易使用):

           SELECT Survey_Response_Created_Date,
                  NPS_Deployment_Type,
                  IF(NPSRating BETWEEN 0 AND 10, 1,0) AS total,
                  IF(NPSRating BETWEEN 9 AND 10, 1,0) AS positive,
                  IF(NPSRating BETWEEN 0 AND  6, 1,0) AS negative
             FROM table

然后在外部查询中总结它们

  SELECT (100 * SUM(positive) - SUM(negative))/SUM(total) AS nps,
         SUM(total) AS responses,
         LAST_DAY(Survey_Response_Created_Date) month_ending,
         NPS_Deployment_Type
    FROM (
           SELECT Survey_Response_Created_Date,
                  NPS_Deployment_Type,
                  IF(NPSRating BETWEEN 0 AND 10, 1,0) AS total,
                  IF(NPSRating BETWEEN 9 AND 10, 1,0) AS positive,
                  IF(NPSRating BETWEEN 0 AND  6, 1,0) AS negative
             FROM table
         ) detail
   WHERE Survey_Response_Created_Date >= '2017-10-01'
     AND Survey_Response_Created_Date <  '2017-11-01'
   GROUP BY LAST_DAY(Survey_Response_Created_Date, NPS_Deployment_Type

这样做的好处是,在您尝试汇总之前,您可以轻松验证您的个人调查回复。