当存在唯一值但存在重复值时,我该如何计数,计数保持不变

how do i count up when there is a unique value but when there is a duplicate value the count remains the same

Question_id Question part_model_ans part_total_marks answer_mark number
16 What's a potato It's a vegetable 1 5 1
16 What's a potato It's a seed 2 5 1
16 4+4 8 2 5 2
17 What's a dog It's a mammal 1 5 1
17 What's a dog It's a pet 2 5 1
17 8+8 16 2 5 2
SELECT Q.question_id,Q.question, PMA.part_model_ans,QP.part_total_marks,MA.answer_mark
  DENSE_RANK()  over(Partition by QP.question_id) 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 列中所有值的值为 1

我想你想要 order by,而不是 partition by:

DENSE_RANK() OVER (ORDER BY QP.question_id) as number

表是无序集,因此要使其正常工作,您需要一个定义行顺序的列,以便您可以按该顺序检查列 Question 的值是否更改。
我在你的示例数据中没有看到这样的列,所以我将使用 SQLite 的 rowid.

创建一个 CTE,它将 return 列 flag 指示某行是否是新 Question 的开始。
最后使用 SUM() window 函数得到你想要的结果:

WITH cte AS (
  SELECT Q.Question_id, Q.Question, PMA.part_model_ans, QP.part_total_marks, MA.answer_mark, Q.rowid, 
         Q.Question <> LAG(Q.Question, 1, '') OVER (PARTITION BY Q.Question_id ORDER BY Q.rowid) flag
  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
)
SELECT Question_id, Question, part_model_ans, part_total_marks, answer_mark, 
       SUM(flag) OVER (PARTITION BY Question_id ORDER BY rowid) number
FROM cte
ORDER BY question_id

查看简化版 demo.

您想按问题排序,这样 window 函数将区分问题(SQL Fiddle 供进一步参考):

SELECT 
    Question, 
    DENSE_RANK() OVER (ORDER BY Question) AS ranker
FROM your_data;

输出:

Question          ranker
----------------- ------
"4+4"             1
"8+8"             2
"What's a dog"    3
"What's a dog"    3
"What's a potato" 4
"What's a potato" 4