SQL - 使用count来仅计算所选值

时间:2016-04-24 04:18:21

标签: sql postgresql

select s.code, s.id
from subjects s
join courses c on (c.subject = s.id)
group by s.id
having count(*) > 25
except
    select s.code, s.id
    from subjects s
    join courses c on (s.id = c.subject)
    join course_staff cs on (cs.course = c.id);

这会返回我想要的结果,但select s.code, s.id行应该是select s.code, count(*)。我只是用它作为测试。当我使用示例中的代码时,我得到4个元组,但是当我为s.id切换count(*)时,我得到所有带有count的元组>来自主题表的25。有没有办法只显示示例中的代码返回的计数结果?

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

$(document).ready(function(){
    $(document).on('change', 'select', function(){
    var optVal = $(this).val();
    var id = $(this).attr('id');

    $.ajax({
        method: "GET",
        url: "optiondetails.php",
        data: {q:optval, tag_id:id},
        cache: false
    }).done(function(response){
        console.log(response);
    });

  });

});

两个表(t1,t2)的左连接,对t2列进行空检查,将选择表t1的所有行,其中行与表t2不匹配。

答案 1 :(得分:0)

可能是因为当你将s.id替换为count(*)时,你的except子句无效。我认为你应该以某种方式将你的except子句合并到查询本身。

如果我正确阅读您的查询,那么这应该有效:

select s.code, count(*)
from subjects s
join courses c on (c.subject = s.id)
where c.id not in (select cs.course from course_staff cs)
group by s.id
having count(*) > 25;