MySQL Query для стоимости книги класса - PullRequest
2 голосов
/ 22 июля 2011

Мне просто нужен один запрос строки MySQL для следующего.

Допустим, есть две простые таблицы: Class и Books

Class
ID--Name-----Students
1 ------ КГ ----------- 20
2 ----- Класс (3) --- 25
3 ------ Класс (5) --- 30

Books
ID--ClassId--Title-------------Cost
1 ----- 1 -------------- Рисунок ------------------ 5
2----- 3 -------------- История -------------------- 25
3 -----1 -------------- A-to-Z -------------------- 10
4 -----2 -------------- Алфавиты --------------- 20
5 ----- 3 -------------- Математика -------------------- 15
6 ----- 2 -------------- Английский ------------------- 30

Скажем:
То, что мы знаем только ----->ID из Class
Мы должны найти ---> Стоимость книги в классе. (Книги для каждого учащегося)В классе A)

Могу ли я получить для него одну строку запроса?

Ответы [ 6 ]

4 голосов
/ 22 июля 2011
   SELECT c.Name,
          SUM(b.Price * c.Students) cost
     FROM Class c
LEFT JOIN Books b ON b.ClassId = c.ID
    WHERE c.Students >= 31
 GROUP BY c.ID
4 голосов
/ 22 июля 2011

Попробуйте это:

в одну строку:

SELECT SUM(Class.Students * Books.Cost) AS BookCost  FROM Books INNER JOIN Class       ON Books.ClassId = Class.ClassId WHERE Books.ClassId = <CLASS-ID-VALUE>  GROUP BY Books.ClassId

С форматированием:

SELECT SUM(Class.Students * Books.Cost) AS BookCost
  FROM Books INNER JOIN Class
   ON Books.ClassId = Class.ClassId
WHERE Books.ClassId = <CLASS-ID-VALUE>
GROUP BY Books.ClassId
2 голосов
/ 22 июля 2011

Это должно сработать:

SELECT SUM(cost) AS cost FROM Books WHERE ClassId=? GROUP BY ClassId

Где вопрос makr является либо идентификатором класса, либо частью подготовленного оператора, где вы передаете ему идентификатор класса.

Вы можете получить сумму с именем столбца "стоимость".

1 голос
/ 22 июля 2011

Вы имели в виду что-то вроде:

SELECT C.Name AS ClassName, SUM(B.Price) * C.Students AS BookCost
  FROM Class AS C INNER JOIN
       Books AS B ON C.ID = B.ClassId
  WHERE C.ID IN (SELECT ID
                   FROM Class
                   WHERE Students >= 31
                   ORDER BY Students ASC
                   LIMIT 1)
  GROUP BY C.ID;
1 голос
/ 22 июля 2011
select min(c.Name) as Name, sum(b.Price * c.Students) as Cost
from Class c
left join Books b on b.ClassId = c.ID
where c.Students >= 31
group by c.ID
1 голос
/ 22 июля 2011

Примерно так:

select c.classId, sum(b.cost) as TotalCost,sum(c.students) as TotalStudents from books as b, class as c where b.classId = class.Id and c.Id = YourKnowClassId group by c.Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...