Ich habe eine Abfrage, wo ich Fragen aus verschiedenen Kategorien auf der Grundlage ihres Schwierigkeitsgrades wollen.Wählen Sie unterschiedliche Werte aus jeder Partition über()
Es gibt Fragen, die ähnlich zu einer anderen Frage sind (ich speichere ihre Verknüpfungen in einem Feld namens "Eimer").
Nun, was ich will ist, dass nur 1 Frage aus einem Eimer zurückgegeben werden soll.
Die Abfrage ich versuche ist:
select *
from (
select distinct q.bucket,
row_number() over (partition by dl.value order by random()) as rn,
dense_rank() over (partition by dl.value, LOWER(qc.value) = LOWER('general') order by random()) as rnc,
dl.value, qc.value as question_category,
q.question_text, q.option_a, q.option_b, q.option_c, q.option_d,
q.correct_answer, q.image_link, q.question_type
from
questions_bank q
inner join
question_category qc on qc.id = q.question_category_id
inner join
sports_type st on st.id = q.sports_type_id
inner join
difficulty_level dl on dl.id = q.difficulty_level_id
where st.game_type = lower('cricket') and dl.value in ('E','M','H')
) s
where
(value = 'E' and rnc <= 6 and LOWER(question_category) != LOWER('general')) or
(value = 'E' and rnc <= 6 and LOWER(question_category) = LOWER('general')) or
value = 'M' and rn <= 0 or
value = 'H' and rn <= 0;
Dies ist nicht die gewünschte Ausgabe zurück.
Gleiche Ausgabe lautet:
bucket | rn | rnc | value | question_category | question_text | option_a | option_b | option_c | option_d | correct_answer | image_link | question_type
2 | 2 | 2 | E | General | abs | a | b | c | d | option_a | https://d1ugevkr3ygvej.cloudfront.net/2.png | i
3 | 3 | 3 | E | General | abcd | a | b | c | d | option_a | https://d1ugevkr3ygvej.cloudfront.net/3.png | i
3 | 4 | 4 | E | General | abs | a | b | c | d | option_a | | t
4 | 1 | 1 | E | General | image | a | b | c | d | option_a | | t
Wenn Sie bemerken, die Bucketwerte 3 als doppelten Wert enthalten. Ich möchte nicht, dass eine Kombination aus Zeilennummer und Bucket eindeutig ist. Die Priorität sollte Bucket zugewiesen werden, und dann sollten die Zeilennummern berechnet werden, aber die Partitionen sollten auf Fragekategorien basieren.
Wie kann ich darüber gehen?
Danke. Es war so eine einfache Lösung. –