我有以下表结构:
1 - Course(course_id, course_nam, language, course_price, create_date, average_rating, category, course_description、certifica_price、course_creator_id)
2 - 学生(student_id,钱包)
3 - 折扣(discount_id、discounted_course_id、allower_course_creator_id、is_allowed、start_date、end_date、百分比)
4 - 注册(student_id、course_id、purchase_price、purchase_date)
我想编写一个查询,该查询将返回 id=$person_id 的课程创建者的每门课程以及以下内容:
1 - 如果该课程有折扣,并且当前日期在该折扣的 start_date 和 end_date 之间,则课程价格将按百分比降低。
2 - 已注册该课程的学生人数。如果没有这样的学生,0.
3 - Course_id、course_name、average_rating、折扣百分比和价格。
我有以下查询
SELECT C.course_id, C.course_name, C.average_rating, total_student,
D.percentage, (CASE WHEN CURRENT_DATE >= D.start_date AND
CURRENT_DATE < D.end_date AND D.is_allowed
THEN C.course_price * (( 100 - D.percentage ) / 100)
ELSE C.course_price END) as price
FROM course C LEFT OUTER JOIN discount D ON
C.course_id = D.discounted_course_id,
(SELECT course_id, COUNT(student_id) AS total_student
FROM enrolls
WHERE course_id IN (SELECT course_id
FROM course
WHERE course_creator_id = '$person_id')
GROUP BY course_id) course_student
WHERE course_student.course_id = C.course_id
当 student、discount、enrolls 表为空时,查询不返回任何内容。我希望它返回带有 total_student = 0(或 null)、百分比 = 0(或 null,无所谓)、价格(课程原价)的课程信息。
答案 0 :(得分:0)
尝试做这样的事情
SELECT
C.course_id, C.course_name, C.average_rating, total_student,
D.percentage, (CASE WHEN CURRENT_DATE >= D.start_date AND
CURRENT_DATE < D.end_date AND D.is_allowed THEN C.course_price * (( 100 - D.percentage ) / 100)
ELSE C.course_price END) as price
FROM course C
LEFT OUTER JOIN discount D
ON C.course_id = D.discounted_course_id
LEFT JOIN (
SELECT course_id, COUNT(student_id) AS total_student
FROM enrolls
WHERE course_id IN (
SELECT course_id
FROM course
WHERE course_creator_id = '$person_id')
ON C.course_id = course_student.course_id
GROUP BY course_id) course_student