sql запрос для подсчета и отображения полного имени - PullRequest
0 голосов
/ 21 февраля 2020

Так что я очень озадачен этим запросом, чтобы отобразить полное имя учителя. Я использовал имя учителя || ' «|| teacher_lastname, но когда я пытаюсь сделать это для учеников, что-то происходит. Я пытаюсь узнать, сколько раз учитель встречался со студентом, и отображать его полное имя и полное имя. Ниже мой запрос:

select d.teacher_id ||' '|| d.teacher_lastname as Teacher,  count (distinct c.student_id)
from teacher d inner join class t on t.teacher_id=d.teacher_id
inner join classRoom tp on tp.dest_id=t.dest_id
inner join classFl ta on tp.dest_id=ta.dest_id
inner join students c on c.student_id=ta.student_id
group by d.teacher_id,d.teacher_lastname

enter image description here Это вывод, но когда я добавляю

select d.teacher_id ||' '|| d.teacher_lastname as Teacher,
c.student_name||' '||c.student_lastname as Student,
count (distinct c.student_id)

, а также добавляю его к group by d.teacher_id,d.teacher_lastname,c.customer_name,c.customer_lastname

это дает следующий результат

enter image description here Что не так? Как я могу исправить это, чтобы иметь одинаковое число отсчетов для каждого учителя? Я использую oracle sql разработчик

1 Ответ

2 голосов
/ 21 февраля 2020

Я думаю, вам нужно удалить DISTINCT изнутри COUNT. Вы говорите, что хотите, чтобы «nr раз учитель встречался со студентом», что, как я понимаю, означает, что если учитель T видел ученика S 9 раз, вы хотите:

T S 9

Если вы сохраняете DISTINCT, то группировка на имя ученика и подсчет количества уникальных идентификаторов учеников будет когда-либо только 1, если два ученика не имеют одинаковые имена. По сути, сохраняя DISTINCT, вы подсчитываете «количество разных учеников с именем X, с которыми встречался этот учитель», и в основном это 1, потому что «1 уникальный ученик по имени Хана Бейкер встретился с xxxx yyyy», «1 уникальный ученик с name Dream Kenise встретился с xxxx yyyy "....

Если у вас есть ученики с одинаковыми именами, но с другим идентификатором, то вы должны добавить идентификатор студента в GROUP BY, чтобы обеспечить различие между двумя студентами. Вам не нужно добавлять его в SELECT, но вам будет сложно отличить их, если вы это сделаете. Если у вас есть два ученика, оба по имени S, но у одного есть ID 1 (и он видел T 5 раз), а у другого - ID 2 (и она видела T 4 раза), вы получите результат:

T S 5
T S 4

Возможно, вы захотите добавить другие столбцы к вашему выбору, чтобы лучше понять разницу между ними


В вашем первом запросе использование DISTINCT означает «количество разных учеников, которые искали встречу с учителем» ». Если опустить DISTINCT в этом запросе, будет подсчитано, «сколько раз учитель встречался с любым учеником»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...