我写sql来选择从7月到12月的支付表。但是,我想找出在这六个月里交了钱的那个学生。如果学生已经支付了全部六个月的费用,那么该学生将被选中。如果学生没有支付任何一个月的费用。那么该学生将不会被选中。但我不知道该怎么做。它是不是像这样
select student_name from payment where (select month(payment_date) from payment) all in (7,8,9,10,11,12)
请原谅我的sql不清楚。但我只想表达我想表达的想法。
谢谢。
发布于 2013-11-05 10:00:44
select student_name, count(distinct month(payment_date))
from payment
group by student_name;将向您显示学生已支付的月份。
select student_name, count(distinct month(payment_date))
from payment
group by student_name
having count(distinct month(payment_date)) <> 6;将向您展示尚未支付全部六个月费用的学生。
发布于 2013-11-05 10:02:58
您可以使用HAVING子句来实现这一点。此示例将您感兴趣的月份指定为WHERE子句的一部分,然后使用GROUP BY和HAVING确保所有月份都匹配。
SELECT student_name
FROM payment
WHERE month(payment_date) IN (7,8,9,10,11,12)
GROUP BY student_name
HAVING COUNT(DISTINCT month(payment_date)) = 6确切的语法将根据您的sql实现而有所不同。
https://stackoverflow.com/questions/19780707
复制相似问题