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

Вот скрипт для моих таблиц:

create table match_history
(match_id number(3),
tutor_id number(3),
student_id number(4),
start_date date,
end_date date,
constraint pk_match_history primary key (match_id),
constraint fk1_match_history foreign key (tutor_id) references tutor(tutor_id),
constraint fk2_match_history foreign key (student_id) references student(student_id));

create table tutor_report
(match_id number(3),
month date,
hours number(3),
lessons number(3),
constraint pk_tutor_report primary key (match_id, month),
constraint fk1_tutor_report foreign key (match_id) references match_history(match_id));

insert into tutor values (100, '05-JAN-2017', 'Active');
insert into tutor values (101, '05-JAN-2017', 'Temp Stop');
insert into tutor values (102, '05-JAN-2017', 'Dropped');
insert into tutor values (103, '22-MAY-2017', 'Active');
insert into tutor values (104, '22-MAY-2017', 'Active');
insert into tutor values (105, '22-MAY-2017', 'Temp Stop');
insert into tutor values (106, '22-MAY-2017', 'Active');

insert into student values (3000, 2.3);
insert into student values (3001, 5.6);
insert into student values (3002, 1.3);
insert into student values (3003, 3.3);
insert into student values (3004, 2.7);
insert into student values (3005, 4.8);
insert into student values (3006, 7.8);
insert into student values (3007, 1.5);

insert into match_history values (1, 100, 3000, '10-JAN-2017', null);
insert into match_history values (2, 101, 3001, '15-JAN-2017', '15-MAY-2017');
insert into match_history values (3, 102, 3002, '10-FEB-2017', '01-MAR-2017');
insert into match_history values (4, 106, 3003, '28-MAY-2017', null);
insert into match_history values (5, 103, 3004, '01-JUN-2017', '15-JUN-2017');
insert into match_history values (6, 104, 3005, '01-JUN-2017', '28-JUN-2017');
insert into match_history values (7, 104, 3006, '01-JUN-2017', null);

insert into tutor_report values (1, '01-JUN-2017', 8, 4);
insert into tutor_report values (4, '01-JUN-2017', 8, 6);
insert into tutor_report values (5, '01-JUN-2017', 4, 4);
insert into tutor_report values (4, '01-JUL-2017', 10, 5);
insert into tutor_report values (1, '01-JUL-2017', 4, 2);

Это то, что у меня до сих пор:

Select (hours * 10) as amount paid from tutor_report group by month,  tutor_id

Однако, очевидно, я не могу просто сказать tutor_id в конце.

sql
1
sdfjbs 12 Апр 2019 в 00:12

2 ответа

Лучший ответ

Вы можете присоединиться к match_history, чтобы получить tutor_id.

Но ваше утверждение и запрос не совпадают. Если вы хотите отсортировать, используйте ORDER BY.

SELECT tr.hours * 10 amount_paid
       FROM tutor_report tr
            INNER JOIN match_history mh
                       ON mh.match_id = tr.match_id
       ORDER BY tr.month,
                mh.tutor_id;

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

SELECT sum(tr.hours) * 10 amount_paid
       FROM tutor_report tr
            INNER JOIN match_history mh
                       ON mh.match_id = tr.match_id
       GROUP BY tr.month,
                mh.tutor_id;
0
sticky bit 11 Апр 2019 в 21:19

Если вы группируете по столбцам в двух таблицах, вам нужно объединить их по соответствующему идентификатору, а затем использовать group by

Select (hours * 10) as amount paid 
from tutor_report a
 join match_history b on a. match_id = b.match_id 
group by month, tutor_id
0
Ashok 11 Апр 2019 в 21:21