Database-Design

使用關係代數計算列中的不同條目

  • April 6, 2017

所以我有一張類似於這張的桌子。每個使用者都發布了關於一個或多個酒店(A、B、C、D)的評論,但在不同的日期,因此即使一個人可能多次評論同一家酒店,也不會出現重複的元組。

我需要計算每個使用者僅使用關係代數評論過的****不同酒店的數量。我怎樣才能做到這一點?

在此處輸入圖像描述

顯示我使用的符號的範例:

R = ƔUser,COUNT(Hotel_reviewed)->Num_Reviews (InitialRelation- table 1) 

將給出每個使用者的評論數量

結果應如下表:

在此處輸入圖像描述

顯示我使用的符號的範例:

R = ƔUser,COUNT(Hotel_reviewed)->Num_Reviews (InitialRelation- table 1) 

將給出每個使用者的評論數量

除了更緊湊的語法(來自@McNets 的回答):

select   User,
        count(distinct Hotel_Reviewed) HotelsReviewed
from     InitialRelation
group by User;

我們還可以先進行投影以找到不同的 User、Hotel_Reviewed 對,然後聚合:

select   User,
        count(Hotel_Reviewed) as Hotels_Reviewed
from     
   ( select distinct
              User,
              Hotel_Reviewed
     from     InitialRelation
   ) as D
group by User ;

這將我們引向關係代數符號:

R = Ɣ User, COUNT(Hotel_Reviewed) -> Hotels_Reviewed 
       (π User, Hotel_Reviewed (InitialRelation)) -> D

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