0

我正在编写 sql 从 7 月到 12 月的付款表中进行选择。但是,我想找出在所有六个月内付款的学生。如果学生已在所有六个月内付款,则该学生将被淘汰。如果学生没有支付任何一个月。那么学生将不会被选中。但我不知道该怎么做。是不是有点像

select student_name from payment where (select month(payment_date) from payment) all in (7,8,9,10,11,12)

请原谅我不清楚的sql。但我只想表达我想要表达的想法。

谢谢。

4

2 回答 2

1
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-05T02:00:43.917 回答
1

HAVING您可以使用该子句来实现这一点。此示例将您感兴趣的月份指定为WHERE子句的一部分,然后使用GROUP BYandHAVING来确保所有月份都匹配。

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 实现而有所不同。

于 2013-11-05T02:02:57.630 回答