2014-04-25 57 views
-1
SELECT a.AuditoriumName, 
    COUNT(d.StudentID) as Total_Visits 
          from Auditorium a 
    INNER JOIN AudiReservation c ON b.AudiID=c.AudiID 
    INNER JOIN OrderHistory d on c.OrderID=d.OrderID 
GROUP BY d.StudentID; 

問題在這裏加入

Auditorium - AudiID(pk), AudiName 
AudiReservation - ReservationID(pk),AudiID(fk),OrderID(fk) 
OrderHistory - OrderID(pk),StudentID(fk) 
Student - StudentID(pk) 

的問題是,它沒有唯一確定的學生。我相信這個主要問題是因爲AudiReservation與OrderHistory有多對一的關係。所以,當輸出到達時,我會得到重複的VenueNames和VenueID。我嘗試將AudiReservation的OrderID分組,以便僅與OrderHistory匹配唯一的值。但這似乎並不奏效。有人可以幫忙嗎?

輸入 -

學生 -

StudentID Student_Name 
1   Matt 
2   Victor 

訂單歷史記錄 -

OrderID  StudentID 
101   1 
102   1 
103   1 
104   2 
104   2 

AudiReservation -

Reservation OrderID AudiID 
001    101  AUDI01 
002    102  AUDI01 
003    103  AUDI01 
003    104  AUDI02 
004    101  AUDI02 
005    102  AUDI02 

禮堂

AUDI01  Audi1-Tower of London 
AUDI02  Audi2-London Bridge 

預期輸出 -

Auditorium Name    Total Students Visit 
AUDI01  Tower of London  2 
AUDI02  London Bridge  2 

共有學生參觀了這裏是誰訪問了觀衆席獨特的學生總數。

+0

計數描述一個,而不是一個長期的說明表的模式之一。使其更易讀 – arunmoezhi

+0

請立即檢查。 – MrCoder

+0

謝謝。我想你錯過了學生表。同時給出你的要求的描述,以便這裏的人可以嘗試找出你的查詢有什麼問題 – arunmoezhi

回答

1

您嘗試使用group和Audi_id採取的distinct學生

SELECT a.AuditoriumName, 
    COUNT(distinct d.StudentID) as Total_Visits 
          from Auditorium a 
    INNER JOIN AudiReservation c ON a.AudiID=c.AudiID 
    INNER JOIN OrderHistory d on c.OrderID=d.OrderID 
GROUP BY a.AudiID; 
+0

表'b'丟失 – arunmoezhi

+0

我編輯了查詢。 – Gooner

+0

工作正常。剛剛用我的sqlfiddle測試過。 – arunmoezhi

0

所以,當輸出來的時候,我得到重複VenueNames和VenueIDs

您可以使用COUNT(DISTINCT the_unique_id_field_your_need)。像這樣COUNT(DISTINCT VenueID)。我不知道哪個表有列可以選擇適當的別名。

+0

沒有這不能解決問題。我已經按學生ID分組.. – MrCoder

+0

然後發佈你的表結構(所有字段),所需的輸出等。你可以爲結構創建sqlfiddle並添加一些示例數據來執行查詢。 – StanislavL

0

查看執行中sqlfiddle

select D.AudiID,E.AuditoriumName,D.Total_Visits 
from Auditorium E, 
(
    select C.AudiID,count(distinct C.StudentId) as Total_Visits 
    from 
    (
     select A.AudiID,B.StudentID 
     from AudiReservation A, OrderHistory B 
     where A.orderID = B.orderID 
    )C 
    group by C.AudiID 
)D 
where E.AudiID = D.AudiID 
+0

在字段列表中獲取一個錯誤 - 未知表'C'。 – MrCoder

+0

@MrCoder:請檢查sqlfiddle。它工作正常 – arunmoezhi