@@ -141,31 +141,41 @@ qualifying_users AS (
141141 GROUP BY usd.user_id
142142 HAVING
143143 CASE WHEN ${ pSearchType } = 'AND'
144- THEN COUNT(DISTINCT CASE WHEN usd.wins >= rs.min_wins THEN usd.skill_id END)
144+ THEN COUNT(DISTINCT CASE
145+ WHEN (usd.wins >= rs.min_wins OR usd.submitted > 0)
146+ THEN usd.skill_id END)
145147 = ${ pNumSkills } ::integer
146- ELSE COUNT(DISTINCT CASE WHEN usd.wins >= rs.min_wins THEN usd.skill_id END) >= 1
148+ ELSE COUNT(DISTINCT CASE
149+ WHEN (usd.wins >= rs.min_wins OR usd.submitted > 0)
150+ THEN usd.skill_id END) >= 1
147151 END
148152),
149153user_match_data AS (
150154 SELECT
151155 usd.user_id,
152- SUM(
153- 1.0
154- + LEAST(usd.wins::float / 100.0, 0.5)
155- + CASE WHEN usd.submitted > 0
156- THEN (usd.wins::float / usd.submitted::float) * 0.5
157- ELSE 0.0
158- END
156+ COALESCE(
157+ SUM(
158+ 1.0
159+ + LEAST(usd.wins::float / 100.0, 0.5)
160+ + CASE WHEN usd.submitted > 0
161+ THEN (usd.wins::float / usd.submitted::float) * 0.5
162+ ELSE 0.0
163+ END
164+ ) FILTER (WHERE usd.wins > 0 OR usd.submitted > 0),
165+ 0.0
159166 ) AS total_skill_points,
160- jsonb_agg(
161- jsonb_build_object(
162- 'id', usd.skill_id::text,
163- 'name', usd.skill_name,
164- 'isVerified', usd.wins > 0,
165- 'wins', usd.wins,
166- 'submitted', usd.submitted
167- )
168- ORDER BY usd.skill_name
167+ COALESCE(
168+ jsonb_agg(
169+ jsonb_build_object(
170+ 'id', usd.skill_id::text,
171+ 'name', usd.skill_name,
172+ 'isVerified', (usd.wins > 0 OR usd.submitted > 0),
173+ 'wins', usd.wins,
174+ 'submitted', usd.submitted
175+ )
176+ ORDER BY usd.skill_name
177+ ) FILTER (WHERE usd.wins > 0 OR usd.submitted > 0),
178+ '[]'::jsonb
169179 ) AS matched_skills
170180 FROM user_skill_data usd
171181 WHERE usd.user_id IN (SELECT user_id FROM qualifying_users)
0 commit comments