我目前正在阅读一本书中的一些特殊情况,并发现了一项我无法解决的任务。
任务是打印每个低于50%的课程。
我需要打印出CourseId,CourseName,Time以及课程的填充方式。 (我可以通过计算课程中的人数除以课程中允许的最大人数100来计算课程的填充程度;(计数(CustomerIds)/ MaxCustomers)* 100)
表格如下:
Customers
-----------
CustomerId FK
CourseId FK
Course
-----------
CourseId PK
CourseTypeId FK
Time
CourseType
------------
CourseTypeId PK
CourseName
MaxCustomers
这是我目前的工作方法:
SELECT course.CourseId,
courseType.CourseName,
course.Date,
(COUNT(customers.CourseId) / courseType.MaxCustomers) * 100 as 'Fill in %'
FROM Customers customers
INNER JOIN Course course
ON customers.CourseId = course.CourseId
INNER JOIN CourseType courseType
ON course.CourseTypeId = courseType.CourseTypeId
GROUP BY course.CourseId
HAVING COUNT(customers.CourseId) / courseType.MaxCustomers) * 100 <= 50
现在正在进行这项练习4个小时,似乎无法开始工作。关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
尝试计数而不是Where:
SELECT course.CourseId, courseType.CourseName, course.Date, (COUNT(customers.CourseId) / courseType.MaxCustomers) * 100 as 'Fill in %' from Customers customers inner join Course course on customers.CourseId = course.CourseId inner join CourseType courseType on course.CourseTypeId = courseType.CourseTypeId group by course.CourseId Having COUNT(customers.CourseId) / courseType.MaxCustomers) * 100 <= 50
答案 1 :(得分:1)
您需要使用HAVING
代替WHERE
此外,您必须在GROUP BY
中添加所有列,而不使用aggregate
功能。
试试这个:
SELECT course.CourseId,
courseType.CourseName,
course.Time,
(COUNT (customers.CourseId) / courseType.MaxCustomers) * 100
AS 'Fill in %'
FROM Customers customers
JOIN Course course ON customers.CourseId = course.CourseId
JOIN CourseType courseType ON course.CourseTypeId = courseType.CourseTypeId
GROUP BY course.CourseId,courseType.CourseName,course.Time,courseType.MaxCustomers
HAVING COUNT(customers.CourseId) / courseType.MaxCustomers * 100 <= 50