[英]SQL how to get max valued row from inner join
My use case is something like this.我的用例是这样的。
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 :)希望这对你现在有帮助:)
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.