CategoryBusinessMapping と Review Rating テーブルを参照して、CategoryID と CategoryName を取得しようとしています。次のカテゴリテーブルのデータを取得しようとしています。
Category ParentCategoryID CategoryName
1 null Education
2 1 School
3 null Health
4 3 Doctors
5 1 Colleges
次のような BusinessID と BusinessName と BusinessDescription を持つBusinessテーブルがあります。
BusinessID BusinessName BusinessDescription
YP00001 XYZ ABCD
YP00002 ABC XYZA
次のようなCategoryBusinessMappingテーブルがあります。
MappingID CategoryID BusinessID
1 1 YP00001
2 2 YP00001
3 5 YP00001
4 3 YP00002
5 4 YP00002
このマッピング テーブルを使用して、別のカテゴリをビジネスにマッピングします。次のような評価テーブルもあります。
RatingID BusinessID
1 YP00001
2 YP00001
3 YP00001
4 YP00002
5 YP00002
このテーブルでは、同じ BusinessID を持つレコードが最も人気のあるビジネスに分類されると想定しています。つまり、上記の ID = YP00001 を持つ Business ABCD には、Rating テーブルに 4 つのレコードがあります。したがって、最も人気のあるビジネスに該当します。同様に、YP00002 は YP00001 の次に落ちます。最も人気のあるビジネスを降順に表示して、CategoryName と CategoryID を取得します。評価テーブルからのみ取得するためにこれを試しました:
select Distinct ReviewRating.BusinessID
,Count(*)as Rating
from YP.utblYPReviewRatingDtls as ReviewRating
group by ReviewRating.BusinessID
order by Rating desc
私はこれを試しました:
SELECT distinct c.CategoryName, b.BusinessID
FROM Category c
INNER JOIN categoryBusinessMapping cbm
ON (c.CategoryID=cbm.CategoryID)
INNER JOIN Business b
ON (cbm.BusinessID=b.BusinessID)
LEFT JOIN Rating r
ON (cbm.BusinessID=r.BusinessID)
where c.ParentCategoryID is null
しかし、冗長な結果が得られます。また、クエリから BusinessID を削除すると、結果が得られますが、結果は正しくありません。冗長性を取り除き、適切な出力を得るにはどうすればよいですか?