2017-09-30 40 views
-2

的計數,我有以下2個表分別命名爲ROOM和會話。如何獲得各個項目

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函數......但我至少有點卡住了。如果任何人都可以點我在正確的方向或解釋這對我來說將不勝感激:)

SELECT BUILDINGNUMBER, ROOMNO FROM ROOM ... COUNT? ... JOIN? 

還有什麼可以讓我顯示/隱藏行,其中會話= 0的號碼嗎?

+0

你的表數據不被標準化。 –

+0

對不起,我或許應該補充約束ROOM_PK PRIMARY KEY(BUILDINGNO,ROOMNO) – james

+0

@詹姆斯那不是正常化。 – Ravi

回答

1

如果你只在每個房間內的會話數有興趣的話,我相信你有足夠的通知在SESSION表中。

SELECT BUILDINGNO, ROOMNO, COUNT(*)FROM SESSION 
GROUP BY BUILDINGNO, ROOMNO; 

Here is a sql fiddle:

0

你可以使用count(不同的SessionID)

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 

和隱藏的房間與resul = 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 
+0

'SELECT ROOM.BUILDINGNO,ROOM.ROOMNO COUNT(DISTINCT SESSION.SESSIONID) 從室溫LEFT加入會話 ON ROOM.ROOMNO = SESSION.ROOMNO AND ROOM.BUILDINGNO = SESSION.BUILDINGNO GROUP BY ROOM.BUILDINGNO,ROOM .ROOMNO;' 謝謝! :)這給了我想要的。我將如何隱藏計數爲0的行? – james

+0

更好地解釋你對此有何評論..是不懂 – scaisEdge

+0

可以使用具有..答案更新 – scaisEdge

0
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; 

[DEMO] [1] http://sqlfiddle.com/#!4/eb290/6