Как составить MySQL запрос

Есть простая задача. Структура базы: введите сюда описание изображения

Задача: для всех дилерских центров те модели (mark.name), для которых суммарное количество выставленных на продажу экземпляров больше 10 (stock.quantity). В этом же запросе для каждой модели указать центр (shop.name), в котором находится наибольшее количество моделей (если таких несколько, то отсортировать по имени центра в алфавитном порядке).

Выбрать суммы несложно:

SELECT mark.name AS MARK, (SUM(stock.quantity)) AS TOTAL, shop.name
FROM mark
JOIN stock ON stock.markID = mark.id
GROUP BY mark.name HAVING SUM(stock.quantity) > 10 

Но как добавить дилерские центры?


Ответы (2 шт):

Автор решения: santavital

Довольно интересная задача ! Предлагаю разбить её на шаги

  1. Выбрать shopid, markid, MAX(quantity) as MQ
  2. Выбрать из запроса (1) markid, MAX(MQ)
  3. Соединить запросы (1) и (2) по markid, MAX(MQ)
  4. Результат отсортировать
→ Ссылка
Автор решения: Игорь Ракшин
       SELECT mark.name AS MARK, (SUM(stock.quantity)) AS TOTAL, shop.name as SHOP   
FROM mark
JOIN stock ON stock.markID = mark.id
JOIN shop ON stock.shopID = shop.id
GROUP BY mark.name HAVING SUM(stock.quantity) > 10
union 
SELECT mark.name AS mark, (SUM(stock.quantity)) AS TOTAL, shop.name AS shop
FROM shop 
JOIN stock ON stock.shopid = shop.id 
JOIN mark ON mark.id=stock.markid 
GROUP BY mark.name HAVING max(stock.quantity) AND SUM(stock.quantity) > 10
→ Ссылка