как сделать несколько запросов MYSQL - PullRequest
0 голосов
/ 06 января 2019

enter image description here

это моя домашняя работа, я ищу. всего 17 вопросов. Я не смог сделать 5 вопросов, но я пытаюсь, пытаюсь ..

  1. перечислите количество книг, которые читает каждый студент. Но рядом с теми, кто не читает книгу, пишут 0.
  2. Найдите самую читаемую книгу.
  3. Перечислите студентов, которые никогда не брали книгу.
  4. Укажите номер книги, название и количество заимствований книг в порядке возрастания в соответствии с номерами книг. 5 Укажите номер полученной книги, сколько раз книга была заимствована (напишите ноль «0» рядом с не заимствованными книгами).

1) выберите s.stnname, s.stnsurname, sum (b.bookname) из процесса «СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ» студента p на s.stnno = p.stnno СЛЕДУЮЩАЯ книга «B» на b.bookno = p.bookno GROUP BY s .stnname, s.stnsurname; FALSE

1 Ответ

0 голосов
/ 06 января 2019

Учтите следующее. Я намеренно упростил дизайн, который запрещает студенту брать одну и ту же книгу дважды ...

DROP TABLE IF EXISTS student_book;

CREATE TABLE student_book
(student_id INT NOT NULL
,book_id INT NOT NULL
,PRIMARY KEY(student_id,book_id)
);

DROP TABLE IF EXISTS student;

CREATE TABLE student
(student_id SERIAL NOT NULL PRIMARY KEY
,student_name VARCHAR(30) NOT NULL
);

DROP TABLE IF EXISTS book;

CREATE TABLE book
(book_id SERIAL NOT NULL PRIMARY KEY
,book_title VARCHAR(30) NOT NULL
);

INSERT INTO student VALUES 
(1,'John'),
(2,'Paul'),
(3,'George'),
(4,'Ringo');

INSERT INTO book VALUES
(101,'In Search of Lost Time'),
(102,'Don Quixote'),
(103,'Ulysses'),
(104,'The Great Gatsby');

INSERT INTO student_book VALUES 
(1,101),
(1,102),
(2,102),
(3,101),
(3,102),
(3,103);


1. 

   SELECT s.*
        , COUNT(sb.book_id) total 
     FROM student s 
     LEFT 
     JOIN student_book sb 
       ON sb.student_id = s.student_id 
    GROUP 
       BY s.student_id;
+------------+--------------+-------+
| student_id | student_name | total |
+------------+--------------+-------+
|          1 | John         |     2 |
|          2 | Paul         |     1 |
|          3 | George       |     3 |
|          4 | Ringo        |     0 |
+------------+--------------+-------+

2. -- This solution ignores the possibility of ties

SELECT b.* 
  FROM book b 
  JOIN student_book sb 
    ON sb.book_id = b.book_id 
 GROUP 
    BY book_id 
 ORDER 
    BY COUNT(*) DESC 
 LIMIT 1;
+---------+-------------+
| book_id | book_title  |
+---------+-------------+
|     102 | Don Quixote |
+---------+-------------+

3. 

SELECT s.* 
  FROM student s 
  LEFT 
  JOIN student_book sb 
    ON sb.student_id = s.student_id 
 WHERE sb.book_id IS NULL;
+------------+--------------+
| student_id | student_name |
+------------+--------------+
|          4 | Ringo        |
+------------+--------------+

4. 

SELECT b.*
     , COUNT(sb.student_id) times_borrowed -- actually 'borrowed by how many distinct students!!
  FROM book b 
  LEFT 
  JOIN student_book sb  
    ON sb.book_id = b.book_id 
 GROUP 
    BY b.book_id 
 ORDER 
    BY b.book_id;
+---------+------------------------+----------------+
| book_id | book_title             | times_borrowed |
+---------+------------------------+----------------+
|     101 | In Search of Lost Time |              2 |
|     102 | Don Quixote            |              3 |
|     103 | Ulysses                |              1 |
|     104 | The Great Gatsby       |              0 |
+---------+------------------------+----------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...