组合两个查询-Postgresql
我正在处理一个sql查询,其中需要两个查询的结果。第一个查询是:组合两个查询-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
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