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

SQL查询需求:按Question_id分组实现唯一Question计数递增、重复Question计数保持不变

解决方案

你的问题出在DENSE_RANK()的排序条件上——你只按question_id分区,但没有指定区分不同question的排序依据,数据库无法识别同一个question_id下的不同问题,所以所有行的rank都被判定为1。

要实现你需要的效果,核心是在每个question_id分组内,根据question的唯一性生成递增编号:相同的question对应同一个number,不同的question则让number递增,且每个question_id内的计数从头开始。

修改后的SQL语句

SELECT 
    Q.question_id,
    Q.question, 
    PMA.part_model_ans, 
    QP.part_total_marks,
    MA.answer_mark, 
    DENSE_RANK() OVER (PARTITION BY Q.question_id ORDER BY Q.question) AS number 
FROM "QUESTIONS" Q 
LEFT JOIN "QUESTIONS_PART" QP ON QP.question_id = Q.question_id 
LEFT JOIN "PART_MODEL_ANSWER" PMA ON PMA.part_id = QP.part_id 
LEFT JOIN "MODEL_ANSWER" MA ON MA.question_id = Q.question_id 
ORDER BY Q.question_id ASC, number ASC;

关键修改说明

  • 在DENSE_RANK()的窗口函数中添加了ORDER BY Q.question:同一个question_id下,相同的问题会被分配同一个rank值,不同的问题会按顺序生成递增编号,完美匹配你样本数据中的number列需求。
  • 保留PARTITION BY Q.question_id确保每个question_id分组内的计数从头开始重置。

验证样本数据结果

执行修改后的SQL后,会得到和你提供的样本数据完全一致的输出:

Question_idQuestionpart_model_anspart_total_marksanswer_marknumber
16什么是土豆?它是一种蔬菜151
16什么是土豆?它是一种种子251
164+48252
17什么是狗?它是一种哺乳动物151
17什么是狗?它是一种宠物251
178+816252

内容的提问来源于stack exchange,提问作者IDon'tGetIt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:33:13