2016-12-28 7 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'. Но есть и другие большие проблемы с вашим запросом. Вы создаете декартово произведение этих четырех таблиц. Как правило, запятые должны * никогда не быть в разделе 'FROM' (практика, которая устарела для ** 25 лет ** сейчас). Вместо этого используйте явный синтаксис 'JOIN'. – Siyual

ответ

1

Согласно стандартам SQL оговорка HAVING должен прийти ПОСЛЕ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; 

Ожидаемое:

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))); 

Generic SQL Пример - http://www.w3schools.com/sql/sql_having.asp

PostgreSQL SQL Пример - https://www.postgresql.org/docs/current/static/tutorial-agg.html

Смежные вопросы