0

这是我的三个相关 sql 表及其相关属性:

  1. 具有属性的 OrderTypeID
  2. RestaurantVisit,与财产OrderTypeIDRestaurantID
  3. 餐厅,有财产ID

当给定一个订单类型(例如饮料、配菜、主菜)时,我需要返回之前订购过该订单类型的所有餐厅,按该类型订单最多的餐厅订购。

例如,给定 type side,我返回 Restaurants r1, r2, r3,其中 r1 是所有餐厅中订单最多side的餐厅,r2是第二多的餐厅,等等。

这是我到目前为止所拥有的(请记住,我已经获得了一个 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

您将要添加一个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以你想要的顺序显示结果。

如果您不添加 a WHERE,它将返回此查询中的所有餐厅和订单类型。

于 2012-10-28T21:45:10.707 回答
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;

ORDER BY 的 ANSI/ISO 标准是使用column alias. (INNER) JOIN 将确保该类型之前已由餐厅订购。

于 2012-10-28T21:58:26.367 回答