2017-05-03 73 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;