2017-03-25 29 views
-1
SQL> SELECT CUSTOMER.CUSTOMERID, 
    2 CUSTOMER.CUSTOMERNAME, 
    3 CONCERTS.TYPEOFCONCERT 
    4 SUM (CUSTOMERID) AS CUSTOMERCOUNT, 
    5 DISTINCT (TYPEOFCONCERT) 
    6 FROM CUSTOMER 
    7 INNER JOIN BOOKING 
    8 ON BOOKING.CUSTOMERID = CUSTOMER.CUSTOMERID 
    9 INNER JOIN EVENT 
10 ON EVENT.EVENTID=BOOKING.EVENTID 
11 INNER JOIN CONCERTS 
12 ON CONCERTS.CONCERTID=EVENT.CONCERTID; 
    SUM (CUSTOMERID) AS CUSTOMERCOUNT, 
     * 
ERROR at line 4: 
ORA-00923: FROM keyword not found where expected 

嘗試查找參加每種類型的音樂會的客戶總數時出現錯誤。你能否讓我知道我要去哪裏錯了。嘗試使用連接查找總計(總和)時出現sql錯誤

+2

你應該指定你正在嘗試做什麼。樣本數據和期望的結果將有所幫助。 –

+0

錯誤消息是由第三行末尾缺失的逗號('SELECT'中的列名稱後面)引起的。解決這個問題之後,你會得到各種其他的錯誤,一旦你解決了這些錯誤,你會得到一個荒謬的結果。客戶ID必須是9930239和8420380這樣的數字。您認爲您會從SUM(CUSTOMERID)獲得什麼?請注意,這隻會添加所有客戶ID!還要注意,這是一個簡單的邏輯事物,它與任何語言的編程無關。 – mathguy

回答

0

如果我正確理解你想要做什麼,你想要COUNT()的客戶,並計算不同類型的音樂會。您還需要一個GROUP BY

SELECT c.CUSTOMERID, c.CUSTOMERNAME, co.TYPEOFCONCERT, 
     COUNT(CUSTOMERID) AS CUSTOMERCOUNT, 
     COUNT(DISTINCT TYPEOFCONCERT) 
FROM CUSTOMER c INNER JOIN 
    BOOKING b 
    ON b.CUSTOMERID = c.CUSTOMERID INNER JOIN 
    EVENT e 
    ON e.EVENTID = b.EVENTID INNER JOIN 
    CONCERTS co 
    ON co.CONCERTID = e.CONCERTID 
GROUP BY c.CUSTOMERID, c.CUSTOMERNAME, co.TYPEOFCONCERT; 

編輯:

關於參加各類型音樂會的總數,可以大大簡化查詢:

SELECT co.TYPEOFCONCERT, 
     COUNT(DISTINCT b.CUSTOMERID) as num_different_customers, 
     COUNT(*) as num_bookings 
FROM BOOKING b INNER JOIN 
    EVENT e 
    ON e.EVENTID = b.EVENTID INNER JOIN 
    CONCERTS co 
    ON co.CONCERTID = e.CONCERTID 
GROUP BY co.TYPEOFCONCERT; 

注:

  • 表別名使查詢更容易編寫和讀取。
  • Customer表不需要,因爲客戶ID在BOOKING
  • 目前尚不清楚您是否想要COUNT(DISTINCT)COUNT(*)。首先,每種類型的顧客只能計算一次,而不管他們預定的音樂會的數量。
+0

我想找到有多少客戶參加每種不同類型的音樂會。 –

+0

@sunnyjassal。 。 。這不是你原來的問題。我更新了答案。 –

0

您未正確使用SUM來查找計數。改爲使用COUNT。另外,在使用聚合時,請使用適當的group by子句。 DISTINCT不是一個函數。它返回選定列/表達式值的唯一組合。使用別名使您的查詢簡潔。客戶出席各類型音樂會

所以

總數,這是你希望客戶的演唱會和計數的類型。如果是這樣,試試這個:

select t.TYPEOFCONCERT, 
    count(*) as customer_count 
from CUSTOMER c 
inner join BOOKING b on b.cID = c.cID 
inner join EVENT e on e.eID = b.eID 
inner join CONCERTS t on t.CONCERTID = e.CONCERTID 
group by t.TYPEOFCONCERT; 
相關問題