programing

테이블의 모든 요소에 대해 조인 쿼리가 제대로 작동하지 않습니다.

projobs 2022. 10. 2. 15:12
반응형

테이블의 모든 요소에 대해 조인 쿼리가 제대로 작동하지 않습니다.

제 문제는요, 저는 두 개의 테이블 과목과 성적이 있어요.

  CREATE TABLE `grades` (
  `gradesID` int(11) NOT NULL,
  `studentBook` int(11) DEFAULT NULL,
  `subjectID` varchar(5) DEFAULT NULL,
  `grade` int(5) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `grades` (`gradesID`, `studentBook`, `subjectID`, `grade`) VALUES
(1, 1034, 'AD356', 9),
(2, 1034, 'CS102', 10),
(3, 1034, 'CS103', 9),
(4, 1034, 'CS220', 5)

CREATE TABLE `subjects` (
  `subjectID` varchar(5) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `espb` smallint(6) DEFAULT NULL,
  `number_of_classes_per_week` smallint(6) DEFAULT NULL,
  `number_of_practices_per_week` smallint(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `subjects`
--

INSERT INTO `subjects` (`subjectID`, `name`, `espb`, `number_of_classes_per_week`, `number_of_practices_per_week`) VALUES
('AD356', '3D modeling Maya', 10, 3, 3),
('CS101', 'Introduction to object-oriented programming', 10, 3, 4),
('CS102', 'JAVA 2', 10, 3, 4),
('CS103', 'Algorithms', 8, 3, 3),

모든 과목에 대해 시험을 보려는 학생 수를 모두 찾기 위해 참여 쿼리를 만들어야 합니다(합격 여부에 관계없이).그 결과, 실험 대상들을 보여줘야 합니다.subjectID, subjects.name, 각 과목의 총 수업 및 실습 수, 시험을 치른 학생 수(합격 여부에 관계없이)제 시도는 이렇습니다.

SELECT 
  subjects.subjectID,
  subjects.name,
  (subjects.number_of_classes_per_week+subjects.number_of_practices_per_week) AS 'Totall number of classes per week',
  COUNT(grades.subjectID) AS 'Number of students that tried to pass'
FROM 
  subjects,
  grades 
WHERE 
  subjects.subjectID = grades.subjectID AND 
  grade >= 5;

하지만 나는 첫 번째 과목만 듣는다.그 과목의 수업 수와 모든 과목의 총 학생 수를 확인하세요. 제가 원하는 결과는 다음과 같습니다.

subjectID     name                           Totall number of classes per week                      Number of students that tried to pass
AD356    3D modeling Maya                  6              10
CS101   Introduction to object-oriented programming 7      4
CS102  'JAVA 2'                            7               5   
CS103    Algorithms                        6               4

MySQL에 카운트할 항목, 즉 카운트오버할 그룹 식별자로 사용할 필드를 지정해야 합니다.

당신의 경우, 그게 바로 그 주제일 겁니다.ID: 각 과목의 모든 성적(5등급 이상)을 세려고 합니다.

따라서 WHERE 문 뒤에 다음과 같이 추가해야 합니다.

GROUP BY subjectID

그럼 넌 끝장이야

용용을 사용하고 .count()그룹화 기준 없이 함수를 집약하므로 mysql은 행을 하나만 반환합니다.이것을 시험해 보세요(도움이 될 수 있습니다).

SELECT 
  subjects.subjectID,
  subjects.name,
  (subjects.number_of_classes_per_week+subjects.number_of_practices_per_week) AS 'Totall number of classes per week',
  COUNT(distinct grades.studentBook) AS 'Number of students that tried to pass'
FROM 
  subjects
JOIN grades ON grades.subjectID = subjects.subjectID
GROUP BY subjects.subjectID

언급URL : https://stackoverflow.com/questions/47795911/join-query-not-working-properly-for-all-the-elements-in-the-table

반응형