সারণীতে প্রতিটি রেকর্ডের জন্য অন্য টেবিল থেকে মাইএসকিউএল কাউন্ট সারি


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

আমি শেষ সারিটি গণনা করার চেষ্টা করছি তবে পরিবর্তে এটি সমস্ত ফলাফল গণনা করে এবং একটি ফলাফল দেয়

আমি কিছু পেয়ে যাচ্ছি

এখানে চিত্র বর্ণনা লিখুন

যেমন একাধিক রেকর্ড রয়েছে কারণ K1052280 এর জন্য উপস্থিতি আইডিতে দুটি এন্ট্রি রয়েছে আমি সেগুলি গণনা করতে এবং নম্বরটি ফিরে পেতে চাই। কিছুটা এইরকম

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


24

আপনি সবেমাত্র গ্রুপ মিস করছেন

গ্রুপের মাধ্যমে আপনার QUERY

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

নিখরচায় গ্রুপের সাথে আপনার QUERY

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>

একবার চেষ্টা করে দেখো !!!


এই পরিষ্কার ব্যাখ্যার জন্য ধন্যবাদ। এখন, আরও একটি প্রশ্ন। আমি মোট টেবিলটি বাছাই করতে পারি বা মোট = 0 যেখানে রেকর্ডগুলি ফিল্টার করতে পারি?
জোনকার.ইন.জেনেভা

order by Totalগ্রুপ অনুসারে যোগ করুন
পিএসএন

@ পিএসএন স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ। বেশিরভাগ ক্ষেত্রে, এর GROUP BYজন্য ডিফল্ট সেট করে ORDER BY। কখনও কখনও, এটি না। সুতরাং, ORDER BYব্যবহার করা যেতে পারে !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ

@ রোল্যান্ডোমাইএসকিউএলডিবিএ, আমার ইস্যুটির সমাধানের প্রত্যাশায় এই সুন্দর উত্তরটি জানার জন্য আমি দুঃখিত! এর TestResultকলামগুলির সাথে একটি তৃতীয় টেবিল রয়েছে তা ভান করি (StudentID, Result)। আমি যোগ দিতে TestResultএবং শেষ পর্যন্ত COUNT(TestResult.Result)প্রতিটি শিক্ষার্থীর জন্য পেতে চান । কোনও কারণে, আমি COUNT এর জন্য অতিরিক্ত মান পাচ্ছি, যখন সাবকিউরিগুলি ব্যবহার করে সঠিক COUNT টি ফেরত দেওয়া হয়েছিল।
ইফেদী ওকনক্বো

স্পষ্ট করতে সহায়তা করতে, আমার ক্যোয়ারী ঠিক এর মতো: stackoverflow.com/a/24727261/2554788 , তবে DISTINCTকীওয়ার্ড ছাড়াই । কাউন্টগুলি subquery প্যাটার্নের চেয়ে আলাদা কিছু (সাধারণত উচ্চতর এবং অবশ্যই ভুল) ফেরত দেওয়ার কারণ কী হতে পারে?
ইফেদী ওকনক্বো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.