Sql 如何获取每个项目的计数编号
我有以下两个分别命名为ROOM和SESSION的表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
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;