Acredito que a consulta a seguir deve funcionar para identificar o nome do cliente com o maior valor derivados de todos os pedidos no ano civil atual:
SELECT CUSTOMER_NAME, Y.QNTY
FROM CUSTOMER_T CUST,
(
SELECT X.CUSTOMER_ID, X.QNTY, MAX(X.QNTY) MAXAMT
FROM (
SELECT ORD.CUSTOMER_ID, SUM(OLN.QUANTITY * PRD.UNIT_PRICE) QNTY
FROM ORDER_T ORD, ORDER_LINE_T OLN, PRODUCT_T PRD
WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(SYSDATE,'YEAR')
AND ORD.ORDER_ID = OLN.ORDER_ID
AND PRD.PRODUCT_ID = OLN.PRODUCT_ID
GROUP BY ORD.CUSTOMER_ID
) X
) Y
WHERE CUST.CUSTOMER_ID = Y.CUSTOMR_ID
AND Y.QNTY = Y.MAXAMT;
A consulta mais interna une as tabelas ORDER, ORDER_LINE e PRODUCT agrupadas pelo ID do cliente para somar o total de compras do ano atual (pedidos por valor somado decrescente). A consulta um nível acima usa os resultados da consulta interna e adiciona o total máximo somado de compras. A consulta mais externa une a tabela CUSTOMER_T com os resultados internos para obter o nome do cliente e o valor total do pedido para todos os clientes que correspondem ao valor MAXAMT.
Você pode modificar a condição de data para sempre restringir a 2016 (independentemente do ano atual) da seguinte forma:
WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(SYSDATE,'YEAR')
Escreva como:
WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(TO_DATE('01/01/2016','MM/DD/YYYY'),'YEAR')
Você também pode puxar a consulta externa de CUSTOMER_T dentro da tabela interna e adicioná-la às junções. Ele realiza a mesma coisa, mas não tenho certeza de qual é mais eficiente (o que é aplicável se seu conjunto de dados for grande).
Nota:Escrito a partir de uma perspectiva de banco de dados Oracle, espero que isso ajude e você possa converter a sintaxe.
Edit:percebi que minha sugestão ignoraria vários clientes com o mesmo valor total de gastos. Eu o reformulei para usar o MAX e mostrar vários clientes (se aplicável). Espero que isso funcione para o seu / pode ser convertido para MYSQL.