0

関連するプロパティを持つ 3 つの関連する SQL テーブルを次に示します。

  1. プロパティを持つ OrderTypeID
  2. RestaurantVisit、プロパティOrderTypeIDRestaurantID
  3. レストラン、プロパティ付きID

注文タイプ (ドリンク、サイド、アントレなど) が与えられた場合、以前にその注文タイプを注文したことのあるすべてのレストランを、そのタイプの注文が最も多いレストラン順に並べ替える必要があります。

たとえば、 type が与えられた場合、 r1 はすべてのレストランの中で最も注文数の多いレストラン、 2 番目に注文数の多いレストランsideなどを返します。r1, r2, r3sider2

これは私がこれまでに持っているものです (OrderTypeID は既に与えられていることを思い出してください):

SELECT DISTINCT r.ID
FROM Restaurant r
  JOIN RestaurantVisit rv
    ON rv.OrderTypeID = ?
WHERE rv.ID = r.ID

これは現在、指定されたタイプの注文を受けたすべてのレストランを返すように機能します。私が今しなければならないことは、特定のタイプの注文が最も多いレストランでこれらを注文することです。

私が考えているのは、このようなものをどこかに追加することですが、まったくわかりません:

ORDER BY COUNT(rv.OrderTypeID = ?)

誰にもアイデアはありますか?ありがとう!

4

2 に答える 2

1
  SELECT R.ID, R.Name, Count(V.OrderTypeID) NumVisits
    FROM OrderType T
    JOIN RestaurantVisit V on V.OrderTypeID = T.ID
    JOIN Restaurant R on R.ID = V.RestaurantID
   WHERE T.name = 'side'
GROUP BY R.ID, R.Name
ORDER BY NumVisits DESC;

ORDERBYのANSI/ISO規格は、を使用することcolumn aliasです。(内部)結合は、タイプが以前にレストランによって注文されたことを確認します。

于 2012-10-28T21:58:26.367 に答える
1

:を追加する必要がありGROUP BYます

SELECT r.ID, rv.OrderTypeId
   , COUNT(1) AS CountOfOrdersAtRestaurant
FROM Restaurant AS r
INNER JOIN RestaurantVisit AS rv ON r.RestaurantId = rv.RestaurantId
GROUP BY r.ID, tv.OrderTypeID
ORDER BY COUNT(1) DESC

これにより、結果がレストランとorderTypeごとにグループ化されます。次に、を追加しORDER BYて、結果を希望の順序で表示できます。

これにを追加しない場合WHERE、このクエリのすべてのレストランとorderTypesが返されます。

于 2012-10-28T21:45:10.707 に答える