-- list_exercises mit skill_min_level / skill_max_level: EXISTS auf exercise_skills mit numerischem Stufen-Rang. -- Ausdruck muss mit backend/routers/exercises.py _EXERCISE_SKILL_LEVEL_RANK_SQL (Alias „es“) übereinstimmen. CREATE INDEX IF NOT EXISTS idx_exercise_skills_exercise_level_rank ON exercise_skills ( exercise_id, (CASE COALESCE( NULLIF(TRIM(LOWER(target_level::text)), ''), NULLIF(TRIM(LOWER(required_level::text)), '') ) WHEN 'basis' THEN 1 WHEN 'grundlagen' THEN 2 WHEN 'aufbau' THEN 3 WHEN 'fortgeschritten' THEN 4 WHEN 'optimierung' THEN 5 WHEN 'einsteiger' THEN 1 WHEN 'experte' THEN 5 WHEN '1' THEN 1 WHEN '2' THEN 2 WHEN '3' THEN 3 WHEN '4' THEN 4 WHEN '5' THEN 5 ELSE NULL END) ) WHERE (CASE COALESCE( NULLIF(TRIM(LOWER(target_level::text)), ''), NULLIF(TRIM(LOWER(required_level::text)), '') ) WHEN 'basis' THEN 1 WHEN 'grundlagen' THEN 2 WHEN 'aufbau' THEN 3 WHEN 'fortgeschritten' THEN 4 WHEN 'optimierung' THEN 5 WHEN 'einsteiger' THEN 1 WHEN 'experte' THEN 5 WHEN '1' THEN 1 WHEN '2' THEN 2 WHEN '3' THEN 3 WHEN '4' THEN 4 WHEN '5' THEN 5 ELSE NULL END) IS NOT NULL;