Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql-省略派生类型上的组_Sql_Postgresql - Fatal编程技术网

Postgresql-省略派生类型上的组

Postgresql-省略派生类型上的组,sql,postgresql,Sql,Postgresql,我有下面的查询,如果它与求和条件匹配,则不会正确返回一行。。。然而问题是我需要改变它 我需要它现在不返回组,如果所有等级总数都已满足 例如,我返回了如下数据。当前,如果A101有足够的引用,它将不会选择该行。但是,如果我想要所有A1,除非所有A1##值都满足SQL条件,该怎么办 我唯一的想法是运行另一个查询以获得下面的结果,然后根据该结果尝试选择?但必须有一个更简单、更快的方法 A101本年级 A102本年级 A103本年级 A201本等级 RETURN QUERY

我有下面的查询,如果它与求和条件匹配,则不会正确返回一行。。。然而问题是我需要改变它

我需要它现在不返回组,如果所有等级总数都已满足

例如,我返回了如下数据。当前,如果A101有足够的引用,它将不会选择该行。但是,如果我想要所有A1,除非所有A1##值都满足SQL条件,该怎么办

我唯一的想法是运行另一个查询以获得下面的结果,然后根据该结果尝试选择?但必须有一个更简单、更快的方法

A101本年级

A102本年级

A103本年级

A201本等级

    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项和最后一列是它遇到多少次的计数,就像这个链接显示我的图片上面的查询正在运行。