You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL公共表表达式(CTE)语法报错求助——HackerRank面试题相关

问题排查:MySQL CTE语法错误

我正在解决HackerRank的面试SQL题,直接执行以下聚合查询可正常运行:

SELECT challenge_id, SUM(total_submissions) AS cid_tot_sub, SUM(total_accepted_submissions) AS cid_tot_acc_sub
      FROM Submission_Stats
      GROUP BY challenge_id

但使用MySQL公共表表达式(CTE)时出现如下语法错误:

ERROR 1064 (42000) at line 55: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cte_ss AS (
SELECT challenge_id, SUM(total_submissions) AS cid_tot_sub, SU' at line 2

我使用的CTE代码如下:

WITH 
    cte_ss AS (
      SELECT challenge_id, SUM(total_submissions) AS cid_tot_sub, SUM(total_accepted_submissions) AS cid_tot_acc_sub
      FROM Submission_Stats
      GROUP BY challenge_id
    ),
    cte_vs AS (
      SELECT challenge_id, SUM(total_views) AS cid_tot_views, SUM(total_unique_views) AS cid_tot_uniq_views
      FROM View_Stats
      GROUP BY challenge_id
    )
select * from cte_ss;

问题原因

MySQL从8.0版本才开始支持CTE(WITH子句),如果你的MySQL服务器版本低于8.0,就会触发这个语法错误——低版本MySQL无法识别WITH关键字。

解决方案

方案1:升级MySQL版本

将MySQL升级到8.0及以上版本,即可正常使用CTE语法。

方案2:用子查询替代CTE

如果无法升级版本,可以把CTE改写为子查询,示例代码如下:

SELECT * 
FROM (
    SELECT challenge_id, SUM(total_submissions) AS cid_tot_sub, SUM(total_accepted_submissions) AS cid_tot_acc_sub
    FROM Submission_Stats
    GROUP BY challenge_id
) AS cte_ss;

如果需要关联两个统计结果,可使用子查询关联:

SELECT 
    s.challenge_id,
    s.cid_tot_sub,
    s.cid_tot_acc_sub,
    v.cid_tot_views,
    v.cid_tot_uniq_views
FROM (
    SELECT challenge_id, SUM(total_submissions) AS cid_tot_sub, SUM(total_accepted_submissions) AS cid_tot_acc_sub
    FROM Submission_Stats
    GROUP BY challenge_id
) AS s
LEFT JOIN (
    SELECT challenge_id, SUM(total_views) AS cid_tot_views, SUM(total_unique_views) AS cid_tot_uniq_views
    FROM View_Stats
    GROUP BY challenge_id
) AS v ON s.challenge_id = v.challenge_id;

内容的提问来源于stack exchange,提问作者gracenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:20:04