Поскольку оба запроса возвращают только одну запись, вы можете просто превратить их в подзапросы и CROSS JOIN
их:
SELECT a.price, a.cost, a.shipping, avg.price, avg.cost, avg.shipping
FROM
(
SELECT `price`, `cost`, `shipping`
FROM `orders`
WHERE `year` = 2019 AND `product_id` = 5 AND `order_id` = 77
LIMIT 1
) a
CROSS JOIN (
SELECT AVG(`price`) price, AVG(`cost`) cost, AVG(`shipping`) shipping
FROM `orders`
WHERE `year` = 2019 AND `product_id` = 5
) avg
Цель предложения LIMIT 1
в первом подзапросе неясна: посколькуНет ORDER BY
, непредсказуемо, какая запись будет возвращена при совпадении более чем одной.
Вот альтернативный подход с использованием условной агрегации (если существует несколько записей с идентификатором заказа 77
, максимальное значениекаждый столбец будет отображаться):
SELECT
MAX(CASE WHEN `order_id` = 77 THEN `price` END) price,
MAX(CASE WHEN `order_id` = 77 THEN `cost` END) cost,
MAX(CASE WHEN `order_id` = 77 THEN `shipping` END) shipping,
AVG(`price`) avg_price,
AVG(`cost`) avg_cost,
AVG(`shipping`) avg_shipping
FROM `orders`
WHERE `year` = 2019 AND `product_id` = 5