1

我有这些表:

   Members
   ---------------------------
   MemberID | Name |.....
      1
      2
      3
      4
   ---------------------------

   RentedMovies
   ---------------------------
   MemberID | MovieID | DateOfLease | ReturnDate | .....
     1      |    1    |  2012-12-20 |  2013-01-05
     1      |    2    |  2012-12-15 |  2012-12-30
     1      |    3    |  2012-12-16 |  2013-01-06
     2      |    1    |  2012-12-17 |  2012-12-18
     2      |    4    |  2012-12-18 |  2013-01-05
     3      |    1    |  2012-12-19 |  2013-01-04

   I need to get this:
   --------------------------------------------------------
   MemberID | NumberOfRentedMovies | ReturnData < curdate())
     1      |         3            |      1
     2      |         2            |      1
     3      |         1            |      0
     4      |         0            |      0
   ---------------------------------------------------------

我使用了下一个代码:

   SELECT  Members.MemberID,
    COUNT(rented.MemberID) AS NumberOfRentedMovies,
    COUNT(notTakenBackOnTime.idClana) AS NumberOfMoviesLate
   FROM  Members 
   left JOIN RentedMovies as rented ON  rented.MemberID = Members.MemberID
   left JOIN RentedMovies as notTakenBackOnTime ON notTakenBackOnTime.MemberID
       = Members.MemberID AND notTakenBackOnTime.ReturnDate< CURDATE()
   group by Members.MemberID

但它不正确地工作!

我也试过这个:

   SELECT MemberID,my,my2
   FROM Members as mem
   JOIN (SELECT COUNT(* )AS my FROM RentedMovies) b 
      ON b.MemberID = mem.MemberID
   JOIN (SELECT COUNT(* )AS my2 FROM RentedMovies WHERE ReturnDate< CURDATE()) c 
   ON c.MemberID = mem.MemberID

但我有一些错误!所以问题是如何完成正确的解决方案?

4

2 回答 2

3

你很亲密。试试这个:

SELECT  M.MemberID, 
        COUNT(RM.MemberID) NumberOfRentedMovies,
        SUM(CASE WHEN RM.ReturnDate < CURDATE() THEN 1 ELSE 0 END) ReturnData 
FROM Members M
LEFT JOIN RentedMovies RM
    ON M.MemberID = RM.MemberID 
GROUP BY M.MemberID 
于 2013-01-02T16:42:13.987 回答
0

您显示的所需结果可以通过以下方式完成:

SELECT MemberID,
       COALESCE(COUNT(MovieID), 0) AS NumberOfRentedMovies,
       COALESCE(SUM(ReturnDate < CURDATE()), 0) AS NotYetReturned
FROM Members
LEFT JOIN RentedMovies USING (MemberID)
GROUP BY MemberID

看看它在行动:http ://sqlfiddle.com/#!2/a192c/1

于 2013-01-02T16:42:41.007 回答