简体   繁体   English

SQL如何从内连接获取最大值行

[英]SQL how to get max valued row from inner join

My use case is something like this.我的用例是这样的。

  1. I have restaurants.我有餐厅。
  2. One restaurants has many restaurant items.一间餐厅有许多餐厅项目。
  3. Each restaurant item has a rating value.每个餐厅项目都有一个评级值。

I want to get restaurants along with the top rated item for that restaurant.我想获得餐厅以及该餐厅的最高评价项目。

I pseudo query will be something like this.我的伪查询将是这样的。

SELECT * FROM RESTAURANTS 
WHERE RESTAURANT_IDS = 1,2,3,4,5 
LEFT JOIN RESTAURANT_ITEMS 
WHERE ratings = MAX(ratings)

in RESTAURANTS table.在餐厅表中。

id|name
-------------
1 |McDonalds
2 |Pizzahut
3 |Buger king
4 |KFC

in RESTAURANT_ITEMS table在 RESTAURANT_ITEMS 表中

id|name      |rating| FK_RES_ID
----------------------------
1 |Pizza     |5     |2
2 |Lava cake |4     |2
3 |Veg burger|3     |4
4 |Chicken b |5.6   |4
5 |Ice cream |4.3   |1
6 |Burger    |5     |1

Desired output would be期望的输出是

id|name      |top item
----------------------
1 |McDonalds |Burger
2 |Pizzahut  |Pizza
3 |Buger king|Null
4 |KFC       |Chicken b

I suppose this is what you are looking for.我想这就是你要找的。 Try and confirm.尝试并确认。 :) :)

SELECT 
      res.ResName
      ,item.Name as ResItem
      ,(Select max(SubItem.rating) from RESTAURANT_ITEMS SubItem where res.RestaurantID= SubItem.RestaurantID) as Rating
FROM 
      RESTAURANTS res
LEFT JOIN 
      RESTAURANT_ITEMS item on res.RestaurantID = item.RestaurantID
WHERE 
      res.Restaurant_ID in (1,2,3,4,5)

EDITED PART BELOW AFTER QUESTION WAS ALSO UPDATED问题后的以下编辑部分也已更新

SELECT 
      res.Name as [Restaurant Name]
      ,item.Name as [Top Item]
FROM 
      RESTAURANTS res
LEFT JOIN 
      RESTAURANT_ITEMS item on res.RestaurantID = item.RestaurantID 
                            and rating = (select max(subItems.rating) from RESTAURANT_ITEMS subItems where subItems.RestaurantID = res.RestaurantID)
WHERE 
      res.Restaurant_ID in (1,2,3,4,5)

Hope this helps you now :)希望这对你现在有帮助:)

  • You can get the highest rating value in a Derived Table, for a Restaurant.您可以在派生表中获得餐厅的最高评级值。
  • Join it back to main tables to get the desired output将其连接回主表以获得所需的输出

Try the following:请尝试以下操作:

SELECT r.id, 
       r.name, 
       ri.name AS top_item 
FROM RESTAURANTS AS r 
LEFT JOIN (SELECT FK_RES_ID, MAX(rating) AS max_rating 
           FROM RESTAURANT_ITEMS 
           GROUP BY FK_RES_ID) AS dt 
  ON dt.FK_RES_ID = r.id 
LEFT JOIN RESTAURANT_ITEMS AS ri ON ri.FK_RES_ID = dt.FK_RES_ID AND 
                                    ri.rating = dt.max_rating 

WHERE r.id IN (1,2,3,4)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM