2017-05-03 105 views
0

我如何獲得低於平均水平的出席者數量?這是我的Oracle查詢SQL查找組出席率低於平均水平

SELECT e.event_id EventID,c.concert_name ConcertName, c.concert_date, 
AVG(e.attendance) Attendance 

FROM event e INNER JOIN concert c ON c.concert_id = e.concert_id 
WHERE Attendance - AVG(e.Attendance) 
GROUP BY c.concert_id ASC; 
+0

這是工作但其中一行顯示出勤率高於平均水平。有什麼可能是錯的? – user3346221

回答

0

使用AVG(..) OVER()解析函數(並且沒有相關子查詢):

SELECT eventId, 
     ConcertName, 
     Concert_Date 
FROM (
    SELECT e.event_id EventID, 
     c.concert_name ConcertName, 
     c.concert_date, 
     e.attendance, 
     AVG(e.attendance) OVER() AS avg_Attendance 
    FROM event e 
     INNER JOIN concert c 
     ON c.concert_id = e.concert_id 
) 
WHERE attendance < avg_attendance; 
+0

AVG FROM dual(e.attendance)OVER()AS avg_Attendance * 錯誤在第9行: ORA-00907:缺少右括號。 *就在e.attendance之前 – user3346221

+0

@ user3346221謝謝。修正後,該行之前有一個逗號缺失。 – MT0

+0

它的工作,但是當我嘗試在select語句中選擇其他字段,但我得到一個錯誤。是修改第一部分如下用於比較選擇EVENTID, ConcertName, Concert_Date,考勤,AVG(出席) 錯誤:SELECT EVENTID, * ERROR位於第1行:ORA-00937:不是一個單組基函數錯誤在eventid附近 – user3346221

0

你可以用這種方式嘗試:

SELECT e.event_id EventID,c.concert_name ConcertName, c.concert_date, 
AVG(e.attendance) Attendance 
FROM event e INNER JOIN concert c ON c.concert_id = e.concert_id 
WHERE e.attendance < (select AVG(ev.attendance) from event ev) 
GROUP BY c.concert_id ASC;