Python 将查询中的数据插入现有表

Python 将查询中的数据插入现有表,python,sql,Python,Sql,此查询有效 SELECT Round(( (SELECT Count(*) FROM nps_surveys WHERE score >= 9 AND social = 0 AND Date(completedon) >= Last_day(CURRENT_DATE) +

此查询有效

SELECT Round(( (SELECT Count(*) 
                FROM   nps_surveys 
                WHERE  score >= 9 
                       AND social = 0 
                       AND Date(completedon) >= Last_day(CURRENT_DATE) + 
                                                INTERVAL 1 day 
                                                - INTERVAL 1 month) / 
                              (SELECT Count(score) 
                               FROM   nps_surveys 
                               WHERE  score IS NOT NULL 
                                      AND social = 0 
                                      AND Date(completedon) >= Last_day( 
                                          CURRENT_DATE) + 
                                                               INTERVAL 1 day 
                                                               - 
                                          INTERVAL 1 month) * 
                      100 ) - ( (SELECT Count(*) 
                          FROM   nps_surveys 
                          WHERE  score >= 0 
                                 AND score <= 6 
                                 AND social = 0 
                                 AND Date(completedon) >= Last_day(CURRENT_DATE) 
                                                          + 
                                                          INTERVAL 1 
                                                          day 
                                                          - INTERVAL 1 month) / 
                                      (SELECT Count(score) 
                                       FROM   nps_surveys 
                                       WHERE  score IS NOT NULL 
                                              AND social = 0 
                                              AND Date(completedon) >= Last_day( 
                                                  CURRENT_DATE) 
                                                                       + 
                                                                       INTERVAL 
                                                                       1 day 
                                                                       - 
                                                  INTERVAL 1 month) * 
                          100 )) nps; 
但是这个不

SELECT cast(round(( 
                    ( 
                    SELECT Count(*) 
                    FROM   nps_surveys 
                    WHERE  score >= 9 
                    AND    social = 0 
                    AND    Date(completedon) >= Last_day(CURRENT_DATE) + interval 1 day - interval 1 month) /
                   ( 
                          SELECT count(score) 
                          FROM   nps_surveys 
                          WHERE  score IS NOT NULL 
                          AND    social = 0 
                          AND    date(completedon) >= last_day(CURRENT_DATE) + interval 1 day - interval 1 month)*100) - (
                  ( 
                         SELECT count(*) 
                         FROM   nps_surveys 
                         WHERE  score >=0 
                         AND    score <= 6 
                         AND    social = 0 
                         AND    date(completedon) >= last_day(CURRENT_DATE) + interval 1 day - interval 1 month) /
                  ( 
                         SELECT count(score) 
                         FROM   nps_surveys 
                         WHERE  score IS NOT NULL 
                         AND    social = 0 
                         AND    date(completedon) >= last_day(CURRENT_DATE) + interval 1 day - interval 1 month)*100)) nps;

当你的SQL语法出现错误时,我一直在运行一个错误;查看与MySQL服务器版本相对应的手册,以了解第1行“nps”附近使用的正确语法,但这没有意义,因为唯一的区别是cast函数。我尝试在没有强制转换的情况下将上述已知的工作查询插入到python脚本中,但它也向我发出了尖锐的声音。

您从未在强制转换函数中使用过相应的右括号。

您应该尝试将查询简化为以下内容:

SELECT COUNT(CASE WHEN score >= 9 THEN 1 END) as bigger_9,           
       COUNT(CASE WHEN score >= 0 and score <= 6  THEN 1 END) as between_0_6,
       COUNT(CASE WHEN score = 0 THEN 1 END) as equal_0,
       COUNT(score) total_count // Dont need filter NULL, COUNT doesnt count NULL
FROM table
WHERE social = 0 
  AND date(completedon) >= last_day(CURRENT_DATE) + 
                           interval 1 day - interval 1 month*100

不确定日期部分,但希望我用SELECT cast打开括号时,您能了解我的想法

。。。不要关闭它,我得到一个错误,你的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行“nps”附近使用的正确语法。@JohnF这正是我的观点,您已经指出您正在使用cast执行函数调用。。。但您从未关闭它-这是一个语法错误,如消息所示。@EyueIDK当我添加关闭时,如nps;,它仍然返回一个错误。@JohnF您需要在nps之前而不是之后使用右括号。老实说,我甚至不确定是否需要强制转换,因为我没有将输入转换为其他内容。即使删除它,查询也会正常运行,但当我将其放入python脚本中时,SQL错误会返回。