Consulta SQL para recuperar SUM en varios ranges de DATE

Tengo una tabla con información sobre los productos vendidos, el cliente, la date de la compra y el resumen de las unidades vendidas.

El resultado que trato de get debe ser de 4 filas, donde las primeras tres son para enero, febrero y marzo. La última fila es para los productos que no se vendieron en estos 3 meses.

Aquí está la table. http://img.sesql.com/mysql/fmlxv.jpg

Las columnas de la tabla son:

id sale_id product_id quantity customer_id payment_method_id total_price date time 

Entonces, en el resultado, la primera fila de 3 sería simplemente:

  • Enero, SUM para enero
  • Febrero, SUM para febrero
  • Marzo, SUM para MArch y la próxima fila debe ser para abril, pero todavía no hay artículos en abril, así que no sé cómo hacer todo esto.

Nota del editor : en base a la image vinculada, las columnas anteriores serían para el año 2013.

Me gustaría ir con lo siguiente

 SELECT SUM(totalprice), year(date), month(date) FROM sales GROUP BY year(date), month(date) 

Esta respuesta se basa en mi interpretación de esta parte de su pregunta:

Marzo, SUM para MArch y la próxima fila debe ser para abril, pero todavía no hay artículos en abril, así que no sé cómo hacer todo esto.

Si intenta get todos los meses durante un año (por ejemplo, 2013), debe tener un marcador de position durante meses con cero ventas. Esto mostrará todos los meses de 2013, incluso cuando no tengan ventas:

 SELECT m.monthnum, SUM(mytable.totalprice) FROM ( SELECT 1 AS monthnum, 'Jan' as monthname UNION SELECT 2, 'Feb' UNION SELECT 3, 'Mar' UNION SELECT 4, 'Apr' UNION SELECT 5, 'May' UNION SELECT 6, 'Jun' UNION SELECT 7, 'Jul' UNION SELECT 8, 'Aug' UNION SELECT 9, 'Sep' UNION SELECT 10, 'Oct' UNION SELECT 11, 'Nov' UNION SELECT 12, 'Dec') m LEFT JOIN my_table ON m.monthnum = MONTH(mytable.date) WHERE YEAR(mytable.date) = 2013 GROUP BY m.monthnum ORDER BY m.monthnum 

Si entiendo lo que quiere decir, puede poner la lógica en una statement de case y usarla en un group by :

 select (case when month(date) = 1 then 'Jan' when month(date) = 2 then 'Feb' when month(date) = 3 then 'Mar' else 'Other' end) as period, sum(quantity) as sumquantity from t group by (case when month(date) = 1 then 'Jan' when month(date) = 2 then 'Feb' when month(date) = 3 then 'Mar' else 'Other' end)