【发布时间】:2020-04-11 02:30:24
【问题描述】:
我有一个无法构造查询的 SQL 问题:我有 3 个表,一个列出候选表(由 c_id 索引),一个用于事件(由 event_id、FK c_id 索引,并且有 event_type 和列一个用于 raw_score)和另一个得分“查找”表(具有 event_type、raw_score 和 scaled_score 列)。
我真正想回答的问题是找到所有通过所有 4 种不同事件类型的候选人(一个是二元的,其余的需要 70 分)。
我想出的解决方案涉及一个使用 having 子句的 CTE,以及第二个在该表中按 id 分组的 CTE,计算每个组中的行数,并仅返回计数至少为 3 的行。问题在于它没有明确检查 3 个不同的事件,只是计数至少为 3,但候选人可能有 3 个相同事件类型的行。我该怎么办?
WITH candidates (brandi_id) AS (
SELECT e.brandi_id
FROM event AS e
LEFT JOIN apf_score_lookup AS ss
ON ss.asmnt_code = e.asmnt_code
AND ss.raw_score = e.score
GROUP BY e.brandi_id, e.asmnt_code, ss.scaled_score
HAVING e.asmnt_code IN ('APFPS','APFSU','APF2M')
AND ss.scaled_score >= 70
)
SELECT candidates.brandi_id
FROM candidates
LEFT JOIN event AS e
ON e.brandi_id = candidates.brandi_id
WHERE e.asmnt_code = 'APFPL'
AND e.score > 0
GROUP BY candidates.brandi_id
HAVING count(candidates.brandi_id) >= 3;
【问题讨论】:
标签: sql