【发布时间】: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