2016-01-29 2 views
0

У меня есть таблицы, как это:Group Функция здесь не допускается SQL

посещаемости (offering_id, visitor_id, regstr_date, amount_paid) Предложение (offering_id, teacher_id) учитель (teacher_id, teacher_firstname, teacher_lastname, start_date)

Возможно, что один посетитель может посещать два или более человек. Я хочу получить guest_id, regstr_date, total_paid, average amount_paid с посещаемости, где предлагаемый идентификатор - 30,40 или 50, а дата начала обучения меньше, чем у любого последнего пользователя regstr_date, а средняя сумма - на каждого посетителя меньше 600. Мой код равен следует:

select 
    distinct(a.visitor_id) as v_id , 
    max(a.regstr_date) as reg_date, 
    sum(a.amount_paid) as total_pay, 
    count(a.regstr_date) as attendance_count, 
    avg(a.amount_paid) as average_paid 
from 
    attendance a, teacher t, offer o 
where 
    a.offering_id = o.offering_id 
    and o.teacher_id = t.teacher_id 
    and a.offering_id in ('30', '40', '50') 
    and max(a.regstr_date) > t.start_date 
group by 
    a.visitor_id 
having 
    avg (a.amount_paid) <= 600; 

Но здесь показана функция группы здесь не допускается. Если возможно, вы могли бы помочь мне с этим, пожалуйста?

+0

Вам не нужно использовать отчетливое – halit

+0

без отчетливые, он не работает, а – Programmer

+0

[Плохие привычки пинать: использование старого стиля JOIN и] (HTTP: //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - этот старый стиль * разделенный запятыми список таблиц * стиль был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –

ответ

0

Этот запрос написан для сервера MS-SQL

select a.visitor_id as v_id , 
max(a.regstr_date) as reg_date, 
sum(a.amount_paid) as total_pay, 
count(a.regstr_date) as attendance_count, 
avg(a.amount_paid) as average_paid 
from attendance a Inner Join offer o on a.offering_id = o.offering_id 
inner join teacher t on t.teacher_id = o.teacher_id 
where a.offering_id in('30','40','50') 
group by a.visitor_id,t.start_date 
having avg (a.amount_paid)<=600 and max(a.regstr_date)>t.start_date; 
+0

Большое спасибо, что тоже работало для меня @halit kardeş – Programmer