Объедините несвязанные таблицы в обобщенном виде

Мне трудно резюмировать таблицу SQL.

Objective: from the given tables I have to join and summarize the table.
col1 = Name_of_student, 
col2 = Name_of_subject(where she/he scored highest), 
col3= highest_number, 
col4 = faculty_Name(where she/he scored highest),
col5 = Name_of_subject(where she/he scored lowest), 
col6 = lowest marks, 
col7 = faculty_Name(where she/he scored lowest)

Примечание - мне нужно написать только один запрос для данного вывода.

Всего четыре таблицы:

  1. Студенты.
  2. Student_subject.
  3. Факультет.
  4. Метки.

Вы можете скопировать код из моего сценария SQL для понимания таблиц.

 create database university ;
    use university ;

    create table students (id int auto_increment primary key,
    student_name varchar(250) NOT NULL, 
    dob DATE NOT NULL) ;

    create table faculty ( id int auto_increment primary key,
    faculty_name varchar(250) NOT NULL,
    date_of_update datetime default NOW()) ;


     create table Students_subject ( id int auto_increment primary key,
     subject_name varchar(250) default 'unknown' NOT NULL,
     subject_faculty int not null,
     foreign key(subject_faculty) references faculty(id));

    create table marks (id int auto_increment primary key,
    student_id int NOT NULL,
    subject_id int NOT NULL,
    marks int NOT NULL,
    date_of_update datetime default now() ON UPDATE NOW(),
    foreign key(student_id) references students(id),
    foreign key(subject_id) references students_subject(id));

    insert into students ( student_name, dob) values 
    ('rob', '2001-03-06'),
    ('bbb', '2001-09-06'),
    ('rab', '1991-03-06'),
    ('root', '2001-03-16') ;


    insert into faculty(faculty_name) values
    ('kaka'),
    ('dope'),
    ('kallie'),
    ('kim');

    insert into students_subject (subject_name, subject_faculty) values
    ('maths', 2),
    ('physics', 3),
    ('english', 4),
    ('biology', 1),
    ('statistics', 2),
    ('french', 4),
    ('economics',3);


    insert into marks ( student_id, subject_id, marks) values
    (1,1,70),
    (1,2,60),
    (1,3,98),
    (1,4,75),
    (1,5,90),
    (1,6,30),
    (1,7,40),
    (2,1,70),
    (2,2,60),
    (2,3,70),
    (2,4,105),
    (2,5,95),
    (2,6,30),
    (2,7,10),
    (3,1,70),
    (3,2,60),
    (3,3,70),
    (3,4,75),
    (3,5,99),
    (3,6,30),
    (3,7,10),
    (4,1,70),
    (4,2,60),
    (4,3,70),
    (4,4,89),
    (4,5,99),
    (4,6,30),
    (4,7,19); 

Я сам написал Query, чтобы поработать над этим, но не могу его сломать.

select students.id, table_high.marks, table_high.faculty_name as high_faculty, table_high.subject_name as sub_high,
student_low.marks , student_low.faculty_name as faculty_low, student_low.subject_name as sub_low from students
inner join
(select students.id, students.student_name ,marks.marks, subject_joined.faculty_name, students_subject.subject_name from marks
inner join (select  students_subject.id,students_subject.subject_name, faculty.faculty_name, students_subject.subject_faculty
from students_subject left join faculty on students_subject.subject_faculty = faculty.id)
as subject_joined on subject_joined.id = marks.subject_id
inner join faculty on subject_joined.subject_faculty = faculty.id
inner join students_subject on students_subject.id = marks.subject_id
inner join students on students.id = marks.student_id 
order by 1, 3 desc) as table_high on table_high.id = students.id
inner join 
(select students.id, students.student_name ,marks.marks, subject_joined.faculty_name, students_subject.subject_name from marks
inner join (select  students_subject.id,students_subject.subject_name, faculty.faculty_name, students_subject.subject_faculty
from students_subject left join faculty on students_subject.subject_faculty = faculty.id)
as subject_joined on subject_joined.id = marks.subject_id
inner join faculty on subject_joined.subject_faculty = faculty.id
inner join students_subject on students_subject.id = marks.subject_id
inner join students on students.id = marks.student_id 
order by 1, 3 ) as student_low on student_low.id = students.id
group by 1 ;

прикрепление экрана вывода:

Объедините несвязанные таблицы в обобщенном виде

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

Madhur Bhaiya 30.10.2018 15:05

Welkom на Stackoverflow, Stackoverflow - это не бесплатная служба кодирования или домашняя работа, веб-сайт помощи при собеседовании. Мы готовы помочь вам, если вы хотя бы сами покажете попытку запроса ... это в том, как задать вопрос в руководстве по Stackoverflow stackoverflow.com/help/how-to-ask qouted по этой ссылке «Объясните, как вы столкнулись с проблемой, которую пытаетесь решить, и любые трудности, которые помешали вам решить ее самостоятельно».

Raymond Nijland 30.10.2018 15:13

Уважаемый Раймонд, Следующий вопрос - это вопрос, который я задумал, и я не могу его решить. Это не вопрос, основанный на домашнем задании, и не выкидываемый на сайт вопрос о разрешении. Я пробовал много попыток, но не могу прийти к решению с помощью одного точного запроса. Я также искал множество разрешений, но не смог найти ни одного, подходящего для моей проблемы. Хотя я не публиковал свой вклад, прежде чем подумал, что это может показаться насмешкой. Вы могли бы посмотреть сейчас.

Mohammed 30.10.2018 18:10

@MohammedTaherPansari есть ли у вас доступ к серверу MySQL версии> = 8.0.2? Это проблема с оконной функцией. Также отредактируйте вопрос и добавьте ожидаемые выходные значения (согласно вашим образцам данных).

Madhur Bhaiya 30.10.2018 18:26

@MadhurBhaiya, я отредактировал вопрос и добавил образец снимка экрана для справки. Спасибо !!

Mohammed 01.11.2018 08:02
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
58
1

Ответы 1

Наконец-то решил этот вопрос!

Основная настройка, которая потребовалась при подведении итогов этой таблицы, заключается в том, что подтаблицу нужно было объединить комбинацией двух столбцов, поскольку группа по команде просто отражает значение первой строки в сводной таблице для несводных столбцов, таким образом отражая значения max и min были невозможны одновременно, для чего я создал подтаблицы, фильтрующие строки через двойные соединения столбцов, и, наконец, присоединил таблицу к основной таблице студентов.

Основной стол, к которому был присоединен, - это студенты.

Подтаблица 1 - hw (в которой суммированы данные для наивысшего уровня) подтаблица 1.2 - высокая для выставления наивысших оценок. подтаблица 2 - lw (в которой суммирована таблица для самого низкого) подтаблица 2.1 - низкая для минимальной маркировки баллов.

Запрос >>

select students.id, students.student_name, lw.min_marks, lw.lower_subject, lw.lower_faculty, 
hw.high_marks, hw.subject_name as high_subject, hw.faculty_name as higher_faculty
from students inner join
(select high.student_id, high.high_marks, high.subject_id, high.subject_name, high.faculty_name
from 
(select marks.student_id, marks.marks as high_marks, sub_with_faculty.subject_id, sub_with_faculty.subject_name,
sub_with_faculty.faculty_name from marks
left join
(select students_subject.id as subject_id, students_subject.subject_name, faculty.faculty_name
from students_subject  
left join faculty  on  students_subject.subject_faculty = faculty.id) as sub_with_faculty
on sub_with_faculty.subject_id = marks.subject_id) as high
inner join (select marks.student_id, max(marks) as marks from marks group by 1) as maximum on 
maximum.student_id = high.student_id and maximum.marks = high.high_marks) as hw on
hw.student_id = students.id
inner join
(select low.student_id, low.low_marks as min_marks, low.subject_id as lower_subjectID, low.subject_name as lower_subject, low.faculty_name as lower_faculty
from 
(select marks.student_id, marks.marks as low_marks, sub_with_faculty.subject_id, sub_with_faculty.subject_name,
sub_with_faculty.faculty_name from marks
left join
(select students_subject.id as subject_id, students_subject.subject_name, faculty.faculty_name
from students_subject  
left join faculty  on  students_subject.subject_faculty = faculty.id) as sub_with_faculty
on sub_with_faculty.subject_id = marks.subject_id) as low
inner join (select marks.student_id, min(marks) as marks from marks group by 1) as minimum on 
minimum.student_id = low.student_id and minimum.marks = low.low_marks) as lw on 
lw.student_id = students.id;

Это может быть хорошим упражнением для тех, кто плохо знаком с MySQL, как и я.

Другие вопросы по теме