学生表。
| regno |名字| lname |地址|性别|手机|
预订表
bookID | regno | tokenNo | CheckIn | CheckOut的
我想在两个特定日期之间让女学生到场。我试图获取相应的值,但即使使用distinct关键字也会输出重复值。 我也尝试过使用Union,但它仍然与不同的相反。
SELECT count(gender) FROM (SELECT distinct regno from student where
gender = 'Male' union SELECT Distinct regno from book) x LEFT OUTER JOIN
student a on x.regno = a.regno LEFT OUTER JOIN book b on x.regno = b.regno
where checkIn >= '2015/7/23' AND checkOut <= '2015/7/31';
这是我试过的另一个
SELECT count(gender) FROM (SELECT distinct(regno), gender from student
where gender = 'Male' ) AS A inner JOIN book AS B On A.regno = B.regno
where checkIn >= '2015/7/23' AND checkOut <= '2015/7/31';
答案 0 :(得分:0)
看起来你的简单查询过于复杂。您需要做的就是加入表格并过滤日期和性别并应用计数。
SELECT COUNT(DISTINCT s.regno)
FROM student s
JOIN booking b on s.regno = b.regno
WHERE s.gender = 'Female'
AND b.checkIn >= '2015/7/23' AND b.checkOut <= '2015/7/31';
distinct
关键字可确保每个学生只有在该期间内有多次预订时才会被计算一次。如果您想要计算所有预订,只需删除distinct
。