Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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_Postgresql - Fatal编程技术网

组合两个查询-Postgresql

组合两个查询-Postgresql,postgresql,Postgresql,我正在处理一个sql查询,其中需要两个查询的结果。第一个查询是: select s.code, count(s.code), s.name from course_staff c join courses e on c.course = e.id join subjects s on e.subject = s.id join semesters x on e.semester = x.id where c.staff = 5033690 group by s.code, s.name

我正在处理一个sql查询,其中需要两个查询的结果。第一个查询是:

select s.code, count(s.code), s.name from course_staff c join courses e on 
c.course = e.id 
join subjects s on e.subject = s.id 
join semesters x on e.semester = x.id 
where c.staff = 5033690
group by s.code, s.name
having count(s.code) > 8;
其结果如下:

    code   | count |              name
 ----------+-------+--------------------------------
  MATS1464 |    10 | Professional Comm&Presentation
  MATS6605 |     9 | Prof Comm & Presentation
 count
-------
    30
第二个问题:

select count(distinct s.code) from course_staff c join courses e 
on c.course = e.id
join subjects s on e.subject = s.id
join semesters x on e.semester = x.id
where c.staff = 5033690
having count(s.code)>20;
其结果如下:

    code   | count |              name
 ----------+-------+--------------------------------
  MATS1464 |    10 | Professional Comm&Presentation
  MATS6605 |     9 | Prof Comm & Presentation
 count
-------
    30
我需要将上述两个查询中的having count条件组合成一个查询,以便在函数或视图中使用它。请告知我如何加入这两个查询,以便满足这两个条件。非常感谢你的帮助。谢谢

这里有一个想法(使用Postgres的窗口功能):

在没有进一步了解您的需求的情况下,将其视为在黑暗中拍摄

以及出于测试目的(无何处):

 code | name | count_both | count_total 
------+------+------------+-------------
    1 | a    |          1 |           2
    2 | b    |          2 |           2
    1 | b    |          1 |           2
    3 | c    |          1 |           1
下面是一个没有区分和分区的示例:

WITH  
  code_name (code, name) AS (  
    VALUES (1, 'a'), (1, 'b'), (2, 'b'), (2, 'b'), (3, 'c')  
),  
  code_name_distinct (code, name) AS (  
    SELECT DISTINCT code, name  
    FROM code_name  
),  
  code_name_counts (code, name, count_both, count_total) AS (  
    SELECT code,  
           name,   
           (SELECT COUNT(*) FROM code_name a  
            WHERE a.code = x.code AND a.name = x.name),  
           (SELECT COUNT(*) FROM code_name b  
            WHERE b.code = x.code)  
    FROM code_name_distinct x  
)  
SELECT code, name, count_both, count_total  
FROM code_name_counts  
返回与上面相同的结果。

这里有一个想法(使用Postgres的窗口函数):

在没有进一步了解您的需求的情况下,将其视为在黑暗中拍摄

以及出于测试目的(无何处):

 code | name | count_both | count_total 
------+------+------------+-------------
    1 | a    |          1 |           2
    2 | b    |          2 |           2
    1 | b    |          1 |           2
    3 | c    |          1 |           1
下面是一个没有区分和分区的示例:

WITH  
  code_name (code, name) AS (  
    VALUES (1, 'a'), (1, 'b'), (2, 'b'), (2, 'b'), (3, 'c')  
),  
  code_name_distinct (code, name) AS (  
    SELECT DISTINCT code, name  
    FROM code_name  
),  
  code_name_counts (code, name, count_both, count_total) AS (  
    SELECT code,  
           name,   
           (SELECT COUNT(*) FROM code_name a  
            WHERE a.code = x.code AND a.name = x.name),  
           (SELECT COUNT(*) FROM code_name b  
            WHERE b.code = x.code)  
    FROM code_name_distinct x  
)  
SELECT code, name, count_both, count_total  
FROM code_name_counts  

返回与上面相同的结果。

嗯?请展示样本数据和期望的结果。这里不太清楚你想要什么。一个查询的having子句的count(s.code)>20,另一个查询的count(s.code)>8。。。这些是同一个字段,所以我不确定您认为如何组合查询。是否需要第一个查询中的列显示在第二个查询中?或者别的什么?第一个查询基本上是一门特定学科多年来教授的次数,第二个查询是多年来教授的不同学科的总数。所以你希望这两个结果在同一行,不是吗?你想要一个计数和一个总数?没错!我想要的正是@D34N5Hh?请展示样本数据和期望的结果。这里不太清楚你想要什么。一个查询的having子句的count(s.code)>20,另一个查询的count(s.code)>8。。。这些是同一个字段,所以我不确定您认为如何组合查询。是否需要第一个查询中的列显示在第二个查询中?或者别的什么?第一个查询基本上是一门特定学科多年来教授的次数,第二个查询是多年来教授的不同学科的总数。所以你希望这两个结果在同一行,不是吗?你想要一个计数和一个总数?没错!我想要的正是@d34n5