【问题标题】:MySQL Query for book cost of a classMySQL查询一门课的书本费用
【发布时间】:2011-07-21 22:31:13
【问题描述】:

我只需要一个 MySQL 行查询即可。

假设有 2 个简单的表:ClassBooks

Class
ID--Name-----Students
1--------KG------------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

让我们说:
我们只知道Class
的----->ID 我们必须找到的是 ---> 一个班级的书本费用。(班级每个学生的书本)

我可以只用一行查询吗?

【问题讨论】:

  • Book Cost 通过在给定的Class 中计算Students Count。 (如果我没有清楚地提到这个问题,对不起大家)
  • 这就是为什么包含预期输出样本总是一个好主意:)
  • 如果这是家庭作业问题,请添加[homework]标签
  • 实际上不是,RMorrisey。我在项目上遇到了麻烦。 :(

标签: mysql sql join


【解决方案1】:

试试这个:

单行:

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

【讨论】:

  • 啊,Book Cost 通过在给定的Class 中使用Students Count 进行计算。 (对不起,如果我没有清楚地提到这个问题)
  • +1,更新后的答案为您解决了:)。我会做SUM(Books.Cost) * Class.Students,但区别并不明显。
  • 是的,Cyber​​nate,这很棒而且有效。请帮助我的另一个步骤:stackoverflow.com/questions/6784054/…
【解决方案2】:
   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

【讨论】:

    【解决方案3】:

    这应该可以解决问题:

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

    问题 makr 是类的 ID,或者是准备好的语句的一部分,您在其中提供类 ID。

    您可以使用列名“cost”检索总和。

    【讨论】:

    • 啊,Book Cost 通过在给定的Class 中使用Students Count 进行计算。 (对不起,如果我没有清楚地提到这个问题)
    【解决方案4】:

    类似这样的:

    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;
    

    【讨论】:

    • 啊,Book Cost 通过在给定的Class 中使用Students Count 进行计算。 (对不起,如果我没有清楚地提到这个问题)
    【解决方案5】:
    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
    

    【讨论】:

      【解决方案6】:

      你的意思是这样的:

      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;
      

      【讨论】:

        猜你喜欢
        • 2014-06-14
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        • 2017-12-15
        • 2020-11-28
        • 2016-07-02
        相关资源
        最近更新 更多