Query

如何創建此 SQL 查詢?

  • October 30, 2018

我正在斯坦福線上參加免費的 DB 課程,坦率地說,其中一個練習給我帶來了一些麻煩。我有一種感覺,這應該非常簡單,所以對於 DBA,我顯然不太擅長 SQL。

我們正在使用簡化的電影評級方案。

對於同一評論者對同一部電影兩次評分並第二次給予更高評分的所有情況,返回評論者的姓名和電影的標題。

這是架構:

Movie ( mID, title, year, director ) 
Reviewer ( rID, name ) 
Rating ( rID, mID, stars, ratingDate ) 

我該怎麼辦?

您可以根據此類條件自行加入表(至少,我可以在 SQL Server 中執行此操作):

SELECT
    r.name,
    m.title
FROM
   rating rt
   JOIN movie m ON (rt.mid = m.mid)
   JOIN reviewer r on (rt.rid = r.rid)
   JOIN rating rt2 on (rt.mid = rt2.mid and rt.rid = rt2.rid)
WHERE
   rt.ratingDate > rt2.ratingDate
   AND rt.stars >  rt2.stars;

請注意,我們正在將評級歸還給自身。這樣,我們可以使用 WHERE 子句來查找rating日期和星號都大於rating.

您可以在此處查看我在 SQL Fiddle 中建構的完整範例。


如果您想添加評論者對電影進行了這 2 條評論並且不再添加的條件,您可以添加:

   AND NOT EXISTS                                  --- not exists
       ( SELECT *
         FROM rating rt3                           --- another rating
         WHERE rt3.mid = m.mid                     --- for same movie
           AND rt3.rid = r.rid                     --- by same reviewer
           AND rt3.ratingDate <> rt2.ratingDate    --- on different date
           AND rt3.ratingDate <> rt1.ratingDate    --- than the first 2 reviews
       ) 

這假定該Rating表具有 (rID, mID, ratingDate)作為主鍵。

引用自:https://dba.stackexchange.com/questions/33357