我需要转换数据,这样它才能进入我的BI软件。我在互联网上找到了下面的查询来计算Net Promoter Score (NPS),但是有一个问题-它计算了所有的数据,忽略了WHERE语句,其中我试图指定年份和月份。这意味着,它接受所有年份的所有行,并输出对它们的计算。
SELECT NPS_Deployment_Type
, CAST(((SUM(CASE WHEN NPSRating BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
SUM(CASE WHEN NPSRating BETWEEN 0 AND 6 THEN 1 ELSE 0 END)) / COUNT(*) * 100) AS signed) NPS
, count(*) as 'SR'
from g360_relationship_survey_extract
where year(Survey_Response_Created_Date) = '2017'
AND month(Survey_Response_Created_Date) >= '10'
GROUP
BY NPS_Deployment_Type注意: Net Promoter系统是客户体验调查,它提出的问题的评分范围从0到10 (含)。计算方法为:((回复10或9的人数)/all回复-(回复0-6的人数)/all回复)* 100
发布于 2017-10-31 09:18:00
几件事。
首先,使用
WHERE Survey_Response_Created_Date >= '2017-10-01'
AND Survey_Response_Created_Date < '2017-11-01'以在2017年10月获得所有回复。它可以利用列上的索引。
其次,为了确保您理解数据,请尝试首先执行详细信息子查询,然后对其进行汇总。例如,首先获取细节(如果这样比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这样做的好处是,在您尝试汇总之前,可以很容易地验证您的单个调查答复。
https://stackoverflow.com/questions/47026031
复制相似问题