1

私は次の表を持っています、

リスト:

ID varchar2(33)
Name varchar2(100)

ユーザー:

ID varchar2(33)
Name varchar2(100)

User_Listing

ID auto-generated
UserId references ID from Users
ListingId references ID from Listing

ユーザーのお気に入りのリスト(この場合、User_listingテーブルでカウントが最も多いリスト。たとえば、user_listingテーブルに次のようなものがある場合)を見つけたい<id,user_id,listing_id>,

1 1 2
1 1 3
1 2 3
1 3 3

お気に入りのリストは3です

これは実行するのに適切なクエリですか?

Select Listing.name
  from Listing
 where Listing.id = (Select p.id 
                       from User_listing p, User_listing q
                     having count(p.id) > count(q.id)
                      GROUP BY p.id)

また、お気に入りの上位5つを印刷する必要がある場合、どうすればよいですか?

4

2 に答える 2

0

オラクルのやり方

select * from (
    select ListingID, Name, count(*) FrequencyOfListingID
      from UserListing, Listing
     where Listing.ID = UserListing.ListingID
     group by ListingID 
     order by 2 desc) 
 where rownum < 6 

Msql の方法はテストされていません

    select Top 5 ListingID, Name, count(*) FrequencyOfListingID
      from UserListing, Listing
     where Listing.ID = UserListing.ListingID
     group by ListingID 
     order by 2 desc) 

MySQl の方法はテストされていません

    select ListingID, Name, count(*) FrequencyOfListingID
      from UserListing, Listing
     where Listing.ID = UserListing.ListingID
     group by ListingID 
     order by 2 desc 
     Limit 5
于 2012-09-29T05:38:54.587 に答える
0

少なくとも上位 5 レコードを取得する部分については、使用している SQL のフレーバーによって異なります。SQL Server では、「Select Top 5」を使用します。MySQL、Postgres、Oracle などでは「制限 5」です。

上位 5 つのリストに関するすべての情報を選択する MySQL ソリューションを次に示します。

SELECT * FROM listing
JOIN 
(SELECT listing_id
FROM user_listing
GROUP BY listing_id 
ORDER BY count(listing_id) DESC
LIMIT 5) as top_five ON top_five.listing_id=listing.id;

上位のリストの ID だけが必要な場合は、代わりに次のようにすることができます。

SELECT listing_id
    FROM user_listing
    GROUP BY listing_id 
    ORDER BY count(listing_id) DESC
    LIMIT 5
于 2012-09-29T05:27:12.407 に答える