Как составить 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
→ Ссылка
Довольно интересная задача ! Предлагаю разбить её на шаги
- Выбрать shopid, markid, MAX(quantity) as MQ
- Выбрать из запроса (1) markid, MAX(MQ)
- Соединить запросы (1) и (2) по markid, MAX(MQ)
- Результат отсортировать
Автор решения: Игорь Ракшин
→ Ссылка
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