SQL как получить максимальную строку из внутреннего соединения - PullRequest
0 голосов
/ 30 октября 2018

Мой вариант использования примерно такой.

  1. У меня есть рестораны.
  2. В одном ресторане есть много ресторанных предметов.
  3. Каждый элемент ресторана имеет значение рейтинга.

Я хочу получить рестораны вместе с самым рейтинговым продуктом для этого ресторана.

Я псевдо-запрос будет что-то вроде этого.

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

в таблице РЕСТОРАНЫ.

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

в таблице 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

Желаемый результат будет

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

Ответы [ 2 ]

0 голосов
/ 30 октября 2018
  • Вы можете получить самое высокое значение рейтинга в производной таблице для ресторана.
  • Присоедините его к основным таблицам, чтобы получить желаемый результат

Попробуйте следующее:

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)
0 голосов
/ 30 октября 2018

Полагаю, это то, что вы ищете. Попробуйте и подтвердите. :)

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)

РЕДАКТИРОВАННАЯ ЧАСТЬ НИЖЕ ПОСЛЕ ВОПРОСА БЫЛА ОБНОВЛЕНА

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)

Надеюсь, это поможет вам сейчас:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...