【问题标题】:Write a query to extract information from 4 tables编写查询从 4 个表中提取信息
【发布时间】:2021-07-30 16:22:40
【问题描述】:

我有一个科学学校的 mysql 数据库。

在这所学校,学生可以报读他们最喜欢的课程。他们支付学费,可能会辍学。

此数据库有一个“学生”表,其中包含正常的学生信息,包括 id。 (我只会提到重要的领域)

包含一般班级信息的“班级”表,包括班级 ID、姓名、学费。

有一个叫“kelas”的接口表,用来存储信息id、class_id、student_id、state。

如果学生退课,状态字段变为0。注册时,其值为1。

名为“payment”的表也包含付款。包括id、class_id、student_id、价格、时间字段

(没有为表定义关系)

现在我想要一个查询,可以通过学生证向我提供以下信息。

1- 学生使用特殊 ID 注册的课程的详细信息。

2- 每个注册课程的所需学生的总付款。

3- 上述每个课程的注册学生总数。

4- 从上述每个课程中辍学的学生人数。

如果您需要其他信息,请告诉我,以便我回答。

我尝试了很多方法来完成这个查询,但每次我在某个部分遇到问题。例如,这个查询不能正常工作:

select class.* ,
        sum(DISTINCT payment.price) as sumPay, 
        kelas.state as studentState, kelas.student_id, 
        count(DISTINCT kelas.state) countEnserafiCompliment, 
        sum(kelas.cancelpi) as cancelipayment,
        COUNT(DISTINCT kelas.student_id) as studentNumber 
FROM kelas
    JOIN class ON kelas.class_id = class.class_id
    left JOIN payment ON kelas.class_id = payment.class_id 
        AND kelas.student_id=payment.student_id
WHERE kelas.student_id = 1
GROUP BY kelas.class_id

谢谢

【问题讨论】:

  • 您要求的结果集不是一个结果集,而是多个结果集。实际上,您的四个查询中的每一个都针对完全不同的数据。只需编写四个查询!
  • 而不是加入 tbale 在加入之前进行产生结果的查询,例如 sum(DISTINCT payment.price)
  • @NiettheDarkAbsol 所有结果都需要在一个部分中。必须有一个查询才能接收所有这些信息
  • 我没抓到。你可以举个例子作为查询@nbk
  • 例如代替付款使用SELECT class_id , student_id, sum(DISTINCT payment.price) FROM payment GROUP BY class_id ,student_id

标签: php mysql


【解决方案1】:

我在本地论坛上得到了答案。我会把它贴在这里供其他朋友使用:

SELECT
 class.class_id,class.name,class.term,class.state,class.tuition,
 kelas.state as studentState,kelas.student_id AS student_id ,kelas.cancelpi as studentCanceliPi,
(
    SELECT
        COUNT(*)
    FROM
        kelas
    WHERE
        state=1 AND class_id=class.class_id
) as present,
    (
    SELECT
        COUNT(*)
    FROM
        kelas
    WHERE
        class_id=class.class_id
) as allStudentNumber,
    (
    SELECT
        SUM(kelas.cancelpi)
    FROM
        kelas
    WHERE
        class_id=class.class_id
    ) AS sumCanceliPi,
(
    SELECT
        SUM(`price`)
    FROM
        payment
    WHERE
        class_id=class.class_id AND student_id = 1
) as total_payment
FROM
 class
INNER JOIN kelas ON kelas.class_id=class.class_id AND kelas.student_id= 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多