MySQL 테이블의 각 레코드에 대해 다른 테이블의 행 수


20
SELECT
  student.StudentID,
  student.`Name`,
  COUNT(attendance.AttendanceID) AS Total
FROM
  student
LEFT JOIN attendance ON student.StudentID = attendance.StudentID

마지막 행을 계산하려고하지만 대신 모든 결과를 계산하고 하나의 결과를 반환합니다.

나는 같은 것을 얻고있다

여기에 이미지 설명을 입력하십시오

K1052280에 대한 출석 ID에 두 개의 항목이 있기 때문에 여러 레코드가 있기 때문에 그 수를 세고 숫자를 반환하고 싶습니다. 같은 것

여기에 이미지 설명을 입력하십시오

답변:


23

GROUP BY가 누락되었습니다.

그룹 별 질문

SELECT
  student.StudentID,
  student.`Name`,
  COUNT(attendance.AttendanceID) AS Total
FROM
  student
LEFT JOIN attendance ON student.StudentID = attendance.StudentID
GROUP BY student.StudentID,student.`Name`;

샘플 데이터

DROP DATABASE IF EXISTS alishaikh; CREATE DATABASE alishaikh;
USE alishaikh
CREATE TABLE student
(
  StudentID CHAR(8) NOT NULL,
  Name VARCHAR(40),
  PRIMARY KEY (StudentID)
);
INSERT INTO student (StudentID,Name) VALUES
('k1052280','Ali Shaikh'),('k1052287','McKenzie Roth'),
('k1052288','Dacey Sullivan'),('k1052294','Zelda Cantu'),
('k1052295','Kimberly Melton'),('k1052296','Tatianna Cantrell'),
('k1052297','Morgan Thornton'),('k1052298','Allistair Barlow'),
('k1052299','Troy Fulton');
CREATE TABLE attendance
(
  AttendanceID INT NOT NULL AUTO_INCREMENT,
  StudentID CHAR(8) NOT NULL,
  PRIMARY KEY (AttendanceID),
  KEY (StudentID)
);
INSERT INTO attendance (StudentID) VALUES
('k1052280'),('k1052280'),('k1052287'),('k1052287'),
('k1052288'),('k1052295'),('k1052295'),('k1052295');

샘플 데이터로드

mysql> DROP DATABASE IF EXISTS alishaikh; CREATE DATABASE alishaikh;
Query OK, 2 rows affected (0.01 sec)
Query OK, 1 row affected (0.00 sec)
mysql> USE alishaikh
Database changed
mysql> CREATE TABLE student
    -> (
    ->   StudentID CHAR(8) NOT NULL,
    ->   Name VARCHAR(40),
    ->   PRIMARY KEY (StudentID)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO student (StudentID,Name) VALUES
    -> ('k1052280','Ali Shaikh'),('k1052287','McKenzie Roth'),
    -> ('k1052288','Dacey Sullivan'),('k1052294','Zelda Cantu'),
    -> ('k1052295','Kimberly Melton'),('k1052296','Tatianna Cantrell'),
    -> ('k1052297','Morgan Thornton'),('k1052298','Allistair Barlow'),
    -> ('k1052299','Troy Fulton');
Query OK, 9 rows affected (0.00 sec)
Records: 9  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE attendance
    -> (
    ->   AttendanceID INT NOT NULL AUTO_INCREMENT,
    ->   StudentID CHAR(8) NOT NULL,
    ->   PRIMARY KEY (AttendanceID),
    ->   KEY (StudentID)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO attendance (StudentID) VALUES
    -> ('k1052280'),('k1052280'),('k1052287'),('k1052287'),
    -> ('k1052288'),('k1052295'),('k1052295'),('k1052295');
Query OK, 8 rows affected (0.00 sec)
Records: 8  Duplicates: 0  Warnings: 0

실행 된 그룹 별 쿼리

mysql> SELECT
    ->   student.StudentID,
    ->   student.`Name`,
    ->   COUNT(attendance.AttendanceID) AS Total
    -> FROM
    ->   student
    -> LEFT JOIN attendance ON student.StudentID = attendance.StudentID
    -> GROUP BY student.StudentID,student.`Name`;
+-----------+-------------------+-------+
| StudentID | Name              | Total |
+-----------+-------------------+-------+
| k1052280  | Ali Shaikh        |     2 |
| k1052287  | McKenzie Roth     |     2 |
| k1052288  | Dacey Sullivan    |     1 |
| k1052294  | Zelda Cantu       |     0 |
| k1052295  | Kimberly Melton   |     3 |
| k1052296  | Tatianna Cantrell |     0 |
| k1052297  | Morgan Thornton   |     0 |
| k1052298  | Allistair Barlow  |     0 |
| k1052299  | Troy Fulton       |     0 |
+-----------+-------------------+-------+
9 rows in set (0.00 sec)

mysql>

시도 해봐 !!!


이 명확한 설명에 감사드립니다. 이제 한가지 더 질문이 있습니다. Total에서 테이블을 정렬하거나 Total = 0 인 레코드를 필터링하려면 어떻게해야합니까?
Zonker.in.Geneva

추가 order by Total로 그룹 후
PSN

@PSN 미리 알림 주셔서 감사합니다. 대부분의 경우 GROUP BY기본값을로 설정합니다 ORDER BY. 때로는 그렇지 않습니다. 그래서 ORDER BY사용할 수도 있습니다!
RolandoMySQLDBA

@RolandoMySQLDBA, 내 문제에 대한 해결책을 기대하기 위해이 명쾌한 답변에 매달리게되어 죄송합니다! TestResult열이 있는 세 번째 테이블이 있다고 가정 해 보겠습니다 (StudentID, Result). 또한 각 학생을 위해 합류 TestResult하고 싶습니다 COUNT(TestResult.Result). 어떤 이유로 COUNT에 대한 초과 값을 얻는 동안 하위 쿼리를 사용하면 올바른 COUNT를 반환했습니다.
Ifedi Okonkwo 2014

명확히하기 위해 내 쿼리는 stackoverflow.com/a/24727261/2554788 과 같지만 DISTINCT키워드는 없습니다. COUNT가 하위 쿼리 패턴과는 다른 것을 반환하는 이유는 무엇입니까?
Ifedi Okonkwo 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.