Sql 如何获取每个项目的计数编号

Sql 如何获取每个项目的计数编号,sql,database,oracle,select,count,Sql,Database,Oracle,Select,Count,我有以下两个分别命名为ROOM和SESSION的表 ROOM BUILDINGNO | ROOMNO | ROOMCAPACITY -----------+--------+------------- B1 | R1 | 121 B1 | R2 | 253 B2 | R1 | 275 B2 | R2 | 126 B2 | R3 | 124 B3 | R1

我有以下两个分别命名为ROOM和SESSION的表

ROOM

BUILDINGNO | ROOMNO | ROOMCAPACITY
-----------+--------+-------------
B1         | R1     | 121
B1         | R2     | 253
B2         | R1     | 275
B2         | R2     | 126
B2         | R3     | 124
B3         | R1     | 256    
B3         | R2     | 324
B4         | R1     | 431
B4         | R2     | 345
B4         | R3     | 231


SESSION

SESSIONID | BUILDINGNO | ROOMNO | SPEAKERID
----------+------------+--------+----------
SS01      | B1         | R1     | S1
SS02      | B2         | R1     | S2
SS03      | B1         | R2     | S2
SS04      | B4         | R2     | S4
SS05      | B3         | R2     | S5
SS06      | B3         | R1     | S5
SS07      | B4         | R2     | S3
SS08      | B1         | R2     | S2
SS09      | B2         | R3     | S4
SS10      | B4         | R1     | S3
我希望能够显示每个房间的会议次数。这将理想地显示一个类似这样的表格

BUILDINGNO | ROOMNO | NUMBEROFSESSIONS
-----------+--------+-----------------
B1         | R1     | 1
B1         | R2     | 2
B2         | R1     | 1
B2         | R2     | 0
B2         | R3     | 1
B3         | R1     | 1  
B3         | R2     | 1
B4         | R1     | 1
B4         | R2     | 2
B4         | R3     | 0    
我知道我需要在某处使用COUNT和JOIN函数。。。但至少我还是有点难以启齿。如果有人能为我指出正确的方向或向我解释这一点,我将不胜感激:)

还有什么可以让我显示/隐藏会话数为0的行?

您可以使用count(distinct sessionid)

对于结果为0的隐藏房间,可以使用

SELECT ROOM.BUILDINGNO , ROOM.ROOMNO, count(distinct SESSION.sessionid)
from ROOM 
left join SESSION on ROOM.ROOMNO = SESSION.ROOMNO 
     and ROOM.BUILDINGNO = SESSION.BUILDINGNO 
group by  ROOM.BUILDINGNUMBER, ROOM.ROOMNO
HAVING count(distinct SESSION.sessionid) >0 
但是你在表格会话中有足够的信息

SELECT SESSION.BUILDINGNO , SESSION.ROOMNO, count(distinct SESSION.sessionid)
SESSION 
group by  SESSION.BUILDINGNO , SESSION.ROOMNO
HAVING count(distinct SESSION.sessionid) >0 

如果您只对每个房间的会议次数感兴趣,那么我相信您在会议表中有足够的信息

[示范][1]

您的表数据未规范化。抱歉,我可能应该添加约束ROOM_PK主键(BUILDINGNO,ROOMNO)@james,这不是规范化。
选择ROOM.BUILDINGNO,ROOM.ROOMNO计数(DISTINCT SESSION.SESSIONID)从房间左侧加入ROOM.ROOMNO=SESSION.ROOMNO和ROOM.BUILDINGNO=SESSION.BUILDINGNO上的会话,按ROOM.BUILDINGNO、ROOM.ROOMNO分组谢谢!:)这就是我想要的。如何隐藏计数为0的行?请更好地解释您的注释。。是我不明白
SELECT ROOM.BUILDINGNO , ROOM.ROOMNO, count(distinct SESSION.sessionid)
from ROOM 
left join SESSION on ROOM.ROOMNO = SESSION.ROOMNO 
     and ROOM.BUILDINGNO = SESSION.BUILDINGNO 
group by  ROOM.BUILDINGNUMBER, ROOM.ROOMNO
HAVING count(distinct SESSION.sessionid) >0 
SELECT SESSION.BUILDINGNO , SESSION.ROOMNO, count(distinct SESSION.sessionid)
SESSION 
group by  SESSION.BUILDINGNO , SESSION.ROOMNO
HAVING count(distinct SESSION.sessionid) >0 
SELECT BUILDINGNO, ROOMNO, COUNT(*)FROM SESSION 
GROUP BY BUILDINGNO, ROOMNO;
SELECT r.BUILDINGNO, r.ROOMNO, count(1) QQ
FROM ROOM r, SESS s
WHERE 
r.ROOMNO = s.ROOMNO
AND r.BUILDINGNO = s.BUILDINGNO
GROUP BY r.BUILDINGNO, r.ROOMNO
ORDER by r.BUILDINGNO;