首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL -使用演讲剧院的类数

PostgreSQL -使用演讲剧院的类数
EN

Stack Overflow用户
提问于 2019-10-17 23:43:31
回答 1查看 42关注 0票数 0

我在一所大学里有一套独特的演讲厅,上面有身份证(如ABC1)和名字(如A剧院)。我想要统计使用每个演讲剧院的不同班级的数量,并根据课堂数量(大多数班级,排名1等)对演讲厅进行排名。这是清楚还是我需要澄清?

代码语言:javascript
复制
id   |   name    | num | rank 
-----------------------------
ABC1 | Theatre A | 42  |  1
ABC5 | Theatre E | 37  |  2
ABC7 | Theatre G | 25  |  3
ABC2 | Theatre B | 25  |  4
ABC3 | Theatre C | 10  |  5
ABC4 | Theatre D | 9   |  6
ABC6 | Theatre F | 0   |  7

到目前为止,我已经得到以下信息:

代码语言:javascript
复制
id   |   name    
------------------
ABC1 | Theatre A 
ABC2 | Theatre B 
ABC3 | Theatre C 
ABC4 | Theatre D 
ABC5 | Theatre E 
ABC6 | Theatre F 
ABC7 | Theatre G 

使用以下代码:

代码语言:javascript
复制
create or replace view Lecture_theatres
AS
SELECT distinct r.id, r.name
FROM Rooms r
     JOIN Room_types t ON (r.rtype=t.id)
     FULL JOIN Classes c ON (c.room = r.id)
WHERE
t.description='Lecture Theatre'
GROUP BY
r.id,r.name
;

我试图通过在以下内容中添加计数(c.id)来计算num:

代码语言:javascript
复制
SELECT distinct r.id, r.name, count(c.id)

然而,这似乎返回的次数,一个特定的班级使用任何房间,而不是特定的演讲剧院。我不确定我是否提供了足够的信息来解决这一问题,但如果有什么遗漏,请评论!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 00:01:52

这是没有测试的,我也不确定窗口函数中的聚合是否像我认为的那样。如果这不起作用,请删除RANK函数,用另一个SELECT包围语句(因此使用它作为子选择),并再次将RANK添加到外部选择列表中。如果两个房间的类数相同,则此函数将给出相同的值。

代码语言:javascript
复制
SELECT r.id, r.name, COUNT(c.id) AS num, RANK() OVER (ORDER BY COUNT(c.id) DESC) AS rank
FROM rooms r
INNER JOIN room_types t ON t.id = r.rtype
LEFT JOIN classes c ON c.room = r.id
WHERE t.description='Lecture Theatre'
GROUP BY r.id --if this is a PK, this should be enough; otherwise add r.name as well
ORDER BY num DESC
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58442091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档