2017-05-03 6 views
0

出席者の人数を平均以下にするにはどうすればよいですか?出席率が平均より低い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 e.attendance < (select AVG(ev.attendance) from event ev) 
GROUP BY c.concert_id ASC; 
+0

これが働いています行の1つは平均よりも高い出席率を示しています。何が間違っているのでしょうか? – user3346221

答えて

0

AVG(..) OVER()分析関数(と相関サブクエリなし)を使用して:これは、あなたがこの方法を試すことができます私のOracleクエリ

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

AVG FROM dual(e.attendance)OVER()AS avg_Attendance * ERROR at line 9: ORA-00907:右括弧がありません。 *ちょうどe.attendanceの直前です – user3346221

+0

@ user3346221ありがとうございました。修正すると、その行の前にカンマがありませんでした。 – MT0

+0

それは動作しますが、select文で追加フィールドを選択しようとするとエラーが発生します。イベントIDを選択して、1行目 * ERROR:ORA-00937:いない単一グループのグループ機能エラー次のようにイベントID、 ConcertName、 Concert_Date、出席、AVG(出席) エラーを選択比較するための第1の部分を修正していますnear eventid – user3346221

0

ある

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;