これに似たテーブルがあります。各ユーザーが1つまたは複数のホテル(A、B、C、D)についてレビューを投稿しましたが、日付が異なるため、同じホテルを2回以上レビューした可能性がある場合でも、タプルの重複はありません。
[〜#〜]個別の[〜#〜]ホテルの数を数える必要がありますRELATIONAL ALGEBRAのみ。どうやってやるの?
使用する表記法を示す例:
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
ユーザーごとにグループ化された個別のホテルを数えることで取得できます。
select User,
count(distinct Hotel_Reviewed) HotelsReviewed
from your_table
group by User;
create table reviews([user] varchar(20), date_review date, hotel_reviewed varchar(10) ); insert into reviews values ('Joe', '20170101', 'A'), ('Joe', '20170201', 'A'), ('Tom', '20170101', 'C'), ('Bryan', '20170101', 'B'), ('Bryan', '20170201', 'A'), ('Mike', '20170101', 'B'), ('Mike', '20170201', 'C'), ('Mike', '20170301', 'D'); GO
select [User], count(distinct Hotel_Reviewed) HotelsReviewed from reviews group by [User]; GO
ユーザー| HotelsReviewed :- -------------: ジョー| 1 トム| 1 ブライアン| 2 マイク| 3
dbfiddle ---(ここ