Postgresql-省略派生类型上的组
我有下面的查询,如果它与求和条件匹配,则不会正确返回一行。。。然而问题是我需要改变它 我需要它现在不返回组,如果所有等级总数都已满足 例如,我返回了如下数据。当前,如果A101有足够的引用,它将不会选择该行。但是,如果我想要所有A1,除非所有A1##值都满足SQL条件,该怎么办 我唯一的想法是运行另一个查询以获得下面的结果,然后根据该结果尝试选择?但必须有一个更简单、更快的方法 A101本年级 A102本年级 A103本年级 A201本等级Postgresql-省略派生类型上的组,sql,postgresql,Sql,Postgresql,我有下面的查询,如果它与求和条件匹配,则不会正确返回一行。。。然而问题是我需要改变它 我需要它现在不返回组,如果所有等级总数都已满足 例如,我返回了如下数据。当前,如果A101有足够的引用,它将不会选择该行。但是,如果我想要所有A1,除非所有A1##值都满足SQL条件,该怎么办 我唯一的想法是运行另一个查询以获得下面的结果,然后根据该结果尝试选择?但必须有一个更简单、更快的方法 A101本年级 A102本年级 A103本年级 A201本等级 RETURN QUERY
RETURN QUERY
SELECT comp.id, comp.shortname, comp.description,
(sum(CASE WHEN crs.grade = 'Pass' THEN 1 WHEN crs.grade = 'Fail' THEN -1 WHEN crs.grade = 'Exceeds' THEN 2 ELSE 0 END) >= comp_l.competency_break_level) AS reached_limit
FROM competencies comp
JOIN competency_levels comp_l USING (competency_group)
LEFT JOIN (
SELECT competency_id, review_status_id
FROM call_competency
JOIN users ON users.id = user_id
WHERE email = _studentemail
) call_c ON call_c.competency_id = comp.id
LEFT JOIN competency_review_status crs ON crs.id = call_c.review_status_id
GROUP BY comp.id, comp.shortname, comp.description, comp_l.competency_break_level
ORDER BY comp.id;
A203本年级
RETURN QUERY
SELECT comp.id, comp.shortname, comp.description,
(sum(CASE WHEN crs.grade = 'Pass' THEN 1 WHEN crs.grade = 'Fail' THEN -1 WHEN crs.grade = 'Exceeds' THEN 2 ELSE 0 END) >= comp_l.competency_break_level) AS reached_limit
FROM competencies comp
JOIN competency_levels comp_l USING (competency_group)
LEFT JOIN (
SELECT competency_id, review_status_id
FROM call_competency
JOIN users ON users.id = user_id
WHERE email = _studentemail
) call_c ON call_c.competency_id = comp.id
LEFT JOIN competency_review_status crs ON crs.id = call_c.review_status_id
GROUP BY comp.id, comp.shortname, comp.description, comp_l.competency_break_level
ORDER BY comp.id;
A204本等级
RETURN QUERY
SELECT comp.id, comp.shortname, comp.description,
(sum(CASE WHEN crs.grade = 'Pass' THEN 1 WHEN crs.grade = 'Fail' THEN -1 WHEN crs.grade = 'Exceeds' THEN 2 ELSE 0 END) >= comp_l.competency_break_level) AS reached_limit
FROM competencies comp
JOIN competency_levels comp_l USING (competency_group)
LEFT JOIN (
SELECT competency_id, review_status_id
FROM call_competency
JOIN users ON users.id = user_id
WHERE email = _studentemail
) call_c ON call_c.competency_id = comp.id
LEFT JOIN competency_review_status crs ON crs.id = call_c.review_status_id
GROUP BY comp.id, comp.shortname, comp.description, comp_l.competency_break_level
ORDER BY comp.id;
B101本等级
RETURN QUERY
SELECT comp.id, comp.shortname, comp.description,
(sum(CASE WHEN crs.grade = 'Pass' THEN 1 WHEN crs.grade = 'Fail' THEN -1 WHEN crs.grade = 'Exceeds' THEN 2 ELSE 0 END) >= comp_l.competency_break_level) AS reached_limit
FROM competencies comp
JOIN competency_levels comp_l USING (competency_group)
LEFT JOIN (
SELECT competency_id, review_status_id
FROM call_competency
JOIN users ON users.id = user_id
WHERE email = _studentemail
) call_c ON call_c.competency_id = comp.id
LEFT JOIN competency_review_status crs ON crs.id = call_c.review_status_id
GROUP BY comp.id, comp.shortname, comp.description, comp_l.competency_break_level
ORDER BY comp.id;
请提供示例数据和预期结果,以及可以针对该示例数据运行的查询。感谢Craig的回复。这是我的dropbox上的DB输出。我希望这是罚款链接在这里,为您得到。我在这里输出了我们的测试数据。同样对于预期的结果,它是5列,每个A101项和最后一列是它遇到多少次的计数,就像这个链接显示我的图片上面的查询正在运行。