Select por meses año
Hola a todos, necesito hacer una consulta que me devuelva el total de los gastos inclusive de lso meses en los que no haya gastos.
tengo la tabla gasto
CREATE TABLE `gasto` (
`id_gasto` int(11) NOT NULL auto_increment,
`descripcion` varchar(255) NOT NULL,
`id_tipo_gasto` int(11) NOT NULL,
`fecha_pago` date NOT NULL,
`monto` decimal(10,2) NOT NULL,
PRIMARY KEY (`id_gasto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Algunos registros de prueba
INSERT INTO `mtx_gasto` VALUES ('95', 'LIBRERIA ', '19', '2013-01-07', '267.00');
INSERT INTO `mtx_gasto` VALUES ('96', 'LIBRERIA ', '19', '2013-01-08', '198.00');
INSERT INTO `mtx_gasto` VALUES ('97', 'VARIOS', '10', '2013-01-05', '320.00');
INSERT INTO `mtx_gasto` VALUES ('98', 'REMEDIOS', '18', '2013-01-05', '186.25');
INSERT INTO `mtx_gasto` VALUES ('99', 'NAFTA', '22', '2013-01-08', '150.00');
INSERT INTO `mtx_gasto` VALUES ('100', 'LIBRERIA ', '19', '2013-01-08', '22.00');
INSERT INTO `mtx_gasto` VALUES ('101', 'sUPER', '1', '2013-01-10', '146.00');
INSERT INTO `mtx_gasto` VALUES ('103', 'DENTISTA', '14', '2013-01-10', '379.00');
INSERT INTO `mtx_gasto` VALUES ('104', 'MERCADERIA', '1', '2013-01-16', '74.00');
INSERT INTO `mtx_gasto` VALUES ('106', 'SUPER', '1', '2013-01-14', '185.53');
INSERT INTO `mtx_gasto` VALUES ('107', 'luz', '2', '2013-01-15', '421.00');
y la tabla meses
CREATE TABLE `meses` (
`id_mes` int(11) NOT NULL,
`mes` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `meses` VALUES ('1', 'Ene');
INSERT INTO `meses` VALUES ('2', 'Feb');
INSERT INTO `meses` VALUES ('3', 'Mar');
INSERT INTO `meses` VALUES ('4', 'Abr');
INSERT INTO `meses` VALUES ('5', 'May');
INSERT INTO `meses` VALUES ('6', 'Jun');
INSERT INTO `meses` VALUES ('7', 'Jul');
INSERT INTO `meses` VALUES ('8', 'Ago');
INSERT INTO `meses` VALUES ('9', 'Sep');
INSERT INTO `meses` VALUES ('10', 'Oct');
INSERT INTO `meses` VALUES ('11', 'Nov');
INSERT INTO `meses` VALUES ('12', 'Dic');
La consulta es
SELECT
gasto.id_tipo_gasto,
month(gasto.fecha_pago) as mes,
ifnull(sum(gasto.monto),0) as total
FROM
gasto
Right Join meses ON month(gastos.fecha_pago) = meses.id_mes
where
month(gasto.fecha_pago) = meses.id_mes
or month(gasto.fecha_pago) is null
GROUP BY
gasto.id_tipo_gasto,
month(gasto.fecha_pago)
Y el resultado:
2 1 852.00
2 3 510.00
2 4 1059.00
2 7 658.00
2 9 604.00
Me faltan los meses 2, 5, 6 y 8.
Quien me puede ayudar?
Saludos