1

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 を削除すると、結果が得られますが、結果は正しくありません。冗長性を取り除き、適切な出力を得るにはどうすればよいですか?

4

1 に答える 1

2

評価テーブルからjoinのカウントを 使用して取得し、結果を並べ替えますBusinessID

SELECT c.*, COUNT(r.BusinessID) AS bcount FROM Category  c
INNER JOIN CategoryBusinessMapping  cbm ON (c.Category=cbm.CategoryID)
INNER JOIN Business b ON (cbm.BusinessID=b.BusinessID)
LEFT JOIN Rating  r ON (cbm.BusinessID=r.BusinessID)
GROUP BY r.BusinessID
ORDER BY bcount DESC
于 2013-08-29T10:14:44.080 に答える