Кто-нибудь может помочь мне с этой ошибкой SQL-кода?

#sql

Вопрос:

Кто-нибудь может помочь мне с этой ошибкой?

Информация о базе данных:

 CREATE DATABASE School;
 

Используется School для создания первой таблицы:

 CREATE TABLE Classes
(
    class_id INT, 
    name Varchar(45), 
    dept Char(4), 
    number CHAR(4), 
    section Char(2), 
    location Varchar(45), 
    meeting_time varchar(45), 

    PRIMARY KEY(class_id)
);

INSERT INTO Classes 
VALUES (000001, 'Intro. to databases', 'info', '1620', '1a', 'sarpy214', 'm/w 1-2:45 pm');

INSERT INTO Classes (class_id, name, dept, number, section, location) 
VALUES (000002, 'intro. to sql', 'info', '2630', 'ww', 'online');

INSERT INTO Classes 
VALUES (000003, 'Software Engineering I', 'info', '1325', '4c', 'socmahoney205', 't/h 10-11:45 pm');

INSERT INTO Classes (class_id, name, dept, number, section, location)
VALUES (000004, 'Software Engineering II', 'info', '1335', 'ww', 'online');

INSERT INTO Classes
VALUES (000005, 'How to leave the shire amp; live forever', 'ring', '1001', '1r', 'socmahoney214', 'f 10-11:45 am');

INSERT INTO Classes (class_id, name, dept, number, section, location)
VALUES (000006, 'Living with the demon inside', 'psyc', '1668', 'ww', 'online');

INSERT INTO Classes
VALUES (000007, 'Internet Scripting jedi mastery', 'info', '2430', '2b', 'socmahoney205', 'm/w 10-11:45 am');

UPDATE Classes 
SET meeting_time = 't/h 10-11:45 am' 
WHERE class_id = 000003;

SELECT * FROM Classes;
 

Теперь создайте 2-ю таблицу:

 CREATE TABLE Enrol
(
    stu_id int, 
    class_id int, 
    grade char(1), 

    PRIMARY KEY (stu_id), 
    FOREIGN KEY (stu_id) REFERENCES Students(Stu_id), 
    FOREIGN KEY (class_id) REFERENCES Classes(class_id)
);

INSERT INTO Enrol VALUES (0000001, 000002, 'A');

INSERT INTO Enrol (stu_id, class_id) VALUES (0000002, 000002);

INSERT INTO Enrol VALUES (0000005, 000001, 'D');

INSERT INTO Enrol (stu_id, class_id) VALUES (0000006, 000005);

INSERT INTO Enrol VALUES (0000003, 000006, 'C');


SELECT * FROM Enrol;
 

Создать 3-ю таблицу:

 CREATE TABLE Students
(
    Stu_id INT PRIMARY KEY, 
    fname VARCHAR(45),
    lname VARCHAR(45),
    area_code CHAR(3),
    phone VARCHAR(8)
);

INSERT INTO Students 
VALUES (000001, 'patty', 'melt', '402', '234-9876');
INSERT INTO Students 
VALUES (000002, 'bill', 'fold', '402', '531-6222');
INSERT INTO Students 
VALUES (000003, 'sam', 'winchester', '402', '234-2346');
INSERT INTO Students 
VALUES (000004, 'luke', 'skywalker', '402', '543-1234');
INSERT INTO Students 
VALUES (000005, 'charlie', 'kelly', '402', '234-6859');
INSERT INTO Students 
VALUES (000006, 'bilbo', 'baggins', '531', '646-3828');

SELECT * FROM Students
 

введите описание изображения здесь

Комментарии:

1. Вместо публикации изображений сообщество рекомендует вместо этого ввести запрос о проблеме и сообщение об ошибке непосредственно в свой вопрос для лучшей читаемости вопроса

2. markheath.net/post/effective-debugging-with-divide-and-conquer

Ответ №1:

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

поэтому добавьте в группу по GROUP BY S.STU_ID, S.FNAME, S.LNAME;

Ответ №2:

«Ошибка» является незначительной, и несколько СУБД даже проигнорируют ее.

Видите ли, если у вас есть такой кортеж , как (ID, FNAME) , очевидно, что каждый идентификатор сопоставляется со своим собственным именем FNAME. Иначе и быть не может. Таким образом, группировка по идентификатору или группировка по идентификатору и имени F-это одно и то же.

Хотя, с другой стороны, в сложном СОЕДИНЕНИИ у вас могут быть разные значения третьего столбца из другой таблицы для одного и того же значения идентификатора; в этом случае вы не можете ВЫБРАТЬ и идентификатор, и этот третий столбец при группировке по идентификатору, потому что у системы не будет достаточно информации, чтобы решить, какие из возможных различных значений третьего столбца должны соответствовать каждому идентификатору. В этом случае, чтобы решить затруднительное положение, вам нужно добавить этот третий столбец в ГРУППУ BY, тем самым увеличив количество идентификаторов в ответе: теперь у вас может быть 1, ДЖОН СМИТ, ЖЕЛТЫЙ и 1, ДЖОН СМИТ, КРАСНЫЙ.

Здесь ваш ВЫБОР относится к первому типу, но ядро базы данных не осознает этого или не заботится об этом и настаивает на том, чтобы вы указали полную ГРУППУ со всеми полями в выборе, даже если одно из них является первичным ключом, а другие находятся в одной таблице.

Так,

 GROUP BY S.STU_ID, S.FNAME, S.LNAME