MySQL: возвращение нескольких столбцов из встроенного подзапроса

Я создаю SQL-оператор, который будет возвращать ежемесячные сводные данные о продажах.

В сводке будут перечислены несколько простых столбцов для даты, общего количества продаж и общей стоимости продаж.

Тем не менее, в дополнение к этим столбцам, я хотел бы включить еще 3, в которых будут перечислены месяцы, лучшие клиенты по потраченной сумме. Для этих столбцов мне нужен какой-то встроенный подзапрос, который может вернуть их идентификатор, имя и сумму, которую они потратили.

Мое текущее усилие использует встроенныйSELECT однако, насколько я знаю, как их реализовать, вы можете вернуть только один столбец и строку для каждого встроенного оператора.

Чтобы обойти это с моим сценарием, я, конечно, могу создать 3 отдельных встроенных оператора, но, помимо этого, это кажется непрактичным, это увеличивает время запроса больше, чем необходимо.

SELECT  
    DATE_FORMAT(OrderDate,'%M %Y') AS OrderMonth,
    COUNT(OrderID) AS TotalOrders, 
    SUM(OrderTotal) AS TotalAmount, 

    (SELECT SUM(OrderTotal) FROM Orders WHERE DATE_FORMAT(OrderDate,'%M %Y') = OrderMonth GROUP BY OrderCustomerFK ORDER BY SUM(OrderTotal) DESC LIMIT 1) AS TotalCustomerAmount,

    (SELECT OrderCustomerFK FROM Orders WHERE DATE_FORMAT(OrderDate,'%M %Y') = OrderMonth GROUP BY OrderCustomerFK ORDER BY SUM(OrderTotal) DESC LIMIT 1) AS CustomerID,

    (SELECT CustomerName FROM Orders INNER JOIN Customers ON OrderCustomerFK = CustomerID WHERE DATE_FORMAT(OrderDate,'%M %Y') = OrderMonth GROUP BY OrderCustomerFK ORDER BY SUM(OrderTotal) DESC LIMIT 1) AS CustomerName

FROM Orders     
GROUP BY DATE_FORMAT(OrderDate,'%m%y')
ORDER BY DATE_FORMAT(OrderDate,'%y%m') DESC

Как я могу лучше структурировать этот запрос?

ПОЛНЫЙ ОТВЕТ

После некоторой доработки решения Дейва Баркера, у меня есть окончательная версия для тех, кто ищет помощь в будущем.

Решение Дейва Баркера отлично работало с данными клиентов, однако, благодаря чему простые столбцы «Общая сумма продаж» и «Общая сумма продаж» получили некоторые сумасшедшие цифры.

SELECT  
        Y.OrderMonth,   Y.TotalOrders,  Y.TotalAmount,
        Z.OrdCustFK,  Z.CustCompany,    Z.CustOrdTotal, Z.CustSalesTotal   


 FROM 
        (SELECT
            OrdDate,
            DATE_FORMAT(OrdDate,'%M %Y') AS OrderMonth, 
            COUNT(OrderID) AS TotalOrders, 
            SUM(OrdGrandTotal) AS TotalAmount
            FROM Orders
            WHERE OrdConfirmed = 1    
            GROUP BY DATE_FORMAT(OrdDate,'%m%y') 
            ORDER BY DATE_FORMAT(OrdDate,'%Y%m') DESC)
    Y INNER JOIN 
        (SELECT 
            DATE_FORMAT(OrdDate,'%M %Y') AS CustMonth, 
            OrdCustFK, 
            CustCompany, 
            COUNT(OrderID) AS CustOrdTotal,
            SUM(OrdGrandTotal) AS CustSalesTotal 
        FROM Orders INNER JOIN CustomerDetails ON OrdCustFK = CustomerID
        WHERE OrdConfirmed = 1
        GROUP BY DATE_FORMAT(OrdDate,'%m%y'), OrdCustFK 
        ORDER BY SUM(OrdGrandTotal) DESC) 
    Z ON Z.CustMonth = Y.OrderMonth

GROUP BY DATE_FORMAT(OrdDate,'%Y%m')
ORDER BY DATE_FORMAT(OrdDate,'%Y%m') DESC

Ответы на вопрос(3)

Ваш ответ на вопрос