2016-12-28 9 views
0

次のクエリを作成しましたが、実行するとGROUP BY句で構文エラーが発生しますが、PostgreSQLを削除すると、t.bsnをGROUP BY句に追加する必要があるというエラーが表示されます。このエラーを修正するにはどうすればよいですか?グループで構文エラーが発生するのはなぜですか?

SELECT t.bsn 
FROM teachers t, designes d, students s, course c, teaches lg 
WHERE c.course_follower = s.class AND t.bsn = lg.bsn AND d.course_code = c.course_code AND d.bsn = t.bsn AND s.class = lg.class 
HAVING t.salary = (2000 + (t.scale * 200) + ((t.scale - 10) * 300) + (100 * (COUNT(d.course_code) * (1.0 + (0.1 * COUNT(s.student_id)))) + (50 * c.amount_of_assignments))) 
GROUP BY t.bsn; 
+5

'GROUP BY'はHAVING''の前に来ます。しかし、あなたの質問には他にも大きな問題があります。これら4つのテーブルのデカルト積を作成しています。経験則として、コンマは 'FROM'節には決して*置かれてはなりません(これは**現在25年**の間廃止されています)。代わりに明示的な 'JOIN'構文を使用してください。 – Siyual

答えて

1

SQL標準によるとHAVING句はGROUP BY AFTER を来る必要があります。あなたの前です。

あなたのコード:期待

SELECT 
     t.bsn 
FROM 
     teachers t, designes d, students s, course c, teaches lg 
WHERE 
     c.course_follower = s.class AND 
     t.bsn = lg.bsn AND 
     d.course_code = c.course_code AND 
     d.bsn = t.bsn AND 
     s.class = lg.class 
HAVING 
     t.salary = (2000 + (t.scale * 200) + ((t.scale - 10) * 300) + (100 * (COUNT(d.course_code) * (1.0 + (0.1 * COUNT(s.student_id)))) + (50 * c.amount_of_assignments))) 
GROUP BY 
     t.bsn; 

SELECT 
     t.bsn 
FROM 
     teachers t, designes d, students s, course c, teaches lg 
WHERE 
     c.course_follower = s.class AND 
     t.bsn = lg.bsn AND 
     d.course_code = c.course_code AND 
     d.bsn = t.bsn AND 
     s.class = lg.class 
GROUP BY 
     t.bsn 
HAVING 
     t.salary = (2000 + (t.scale * 200) + ((t.scale - 10) * 300) + (100 * (COUNT(d.course_code) * (1.0 + (0.1 * COUNT(s.student_id)))) + (50 * c.amount_of_assignments))); 

汎用SQL例 - http://www.w3schools.com/sql/sql_having.asp

PostgreSQLのSQL例 - https://www.postgresql.org/docs/current/static/tutorial-agg.html

関連する問題