Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta Mysql - Solo suma una fila

Estas en el tema de Consulta Mysql - Solo suma una fila en el foro de Mysql en Foros del Web. Hola tengo un programilla de contabilidad casera, que genera una consulta a final de mes, para ver lo que se ha gastado de Comida, Gasolina,... ...
  #1 (permalink)  
Antiguo 08/09/2009, 10:17
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Consulta Mysql - Solo suma una fila

Hola tengo un programilla de contabilidad casera, que genera una consulta a final de mes, para ver lo que se ha gastado de Comida, Gasolina,...
El problema es que si por ejemplo en Junio hay cuatro gastos de Comida, sólo te muestra el primer gasto y debería sumar todos.

Os muestro un poco como es la base de datos, se llama employee:

id_categoria_gastos | Fecha | categoria_gastos | Gastos
1 | 2009-06-30 | Comida | 30
2 | 2009-06-30 | Comida | 25
3 | 2009-06-30 | Comida | 10
4 | 2009-06-30 | Gasolina | 20
5 | 2009-06-30 | Agua | 60
6 | 2009-06-30 | Luz | 30


Os adjunto la consulta ¿Que está mal?

Código Sentencia Mysql:
Ver original
  1. SELECT categoria_gastos.categoria_gastos, SUM(employee.Gastos), Gastos FROM categoria_gastos INNER JOIN employee USING (id_categoria_gastos) WHERE (YEAR(employee.Fecha) = 2009 AND MONTH(employee.Fecha) = 6) GROUP BY employee.id_categoria_gastos


Gracias por vuestra ayuda :)
  #2 (permalink)  
Antiguo 08/09/2009, 10:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

Código mysql:
Ver original
  1. SELECT categoria_gastos.categoria_gastos, t1.suma, Gastos FROM categoria_gastos INNER JOIN (select employee.id,SUM(employee.Gastos) from employee group by id)t1 on
  2. t1.idcategoria_gastos=categoria_gastos.idcategoria_gastos WHERE (YEAR(employee.Fecha) = 2009 AND MONTH(employee.Fecha) = 6) GROUP BY employee.id_categoria_gastos

es algo así.

En una subconsulta debes hacer primero la suma y después mostrarlña desde afuera.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 08/09/2009, 13:24
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

Gracias, pero

MySQL ha dicho:
#1054 - Unknown column 'employee.id' in 'field list'


¿quizas es por el la palabra t1, no se lo que es eso? o hay algo mal en employee, la consulta que di al principio, si se ejecuta aunque con el error comentado. Pero esta me sale este error


  #4 (permalink)  
Antiguo 08/09/2009, 13:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

t1 es el alias que se le da a la tabla resultante ingresada en el parentesis.
reemplaza bien los campos existentes de la tabla employees.

Si sigues con problemas, postea los create table de las tablas y algunos inserts para darte un ejemplo exacto de lo que requieres.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 08/09/2009, 16:09
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

llevo un rato, y no doy con ello, no se lo que es un insert ni un create, pero supongo que lo que quieres son los nombres de los campos de la tabla employee y categoria_gastos. Te los doy abajo:

employee
emp_id int(11)
active tinyint(1)
fname varchar(20)
minit char(1)
lname varchar(30)
job_id smallint(6)
banco_id smallint(6)
id_categoria_gastos smallint(6)
id_categoria_ingresos smallint(6)
id_categoria_nombres smallint(100)
Fecha date
Ingresos float
Gastos float
Diferencia mediumtext
Observaciones varchar(100)


categoria_gastos
id_categoria_gastos smallint(100)
numero_categoria_gastos smallint(10)
categoria_gastos varchar(100)



mil gracias!
  #6 (permalink)  
Antiguo 08/09/2009, 20:49
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

exactamente eso, pero si nos envias esta misma información tal cual fueron creadas las tablas, nos ahorra tiempo en digittar información tan larga y nos podemos concentrar en la consulta que requieres.

create table employee(cmpos... etc)

insert into employees values(valores)


saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 09/09/2009, 06:49
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

aaah!

te adjunto lo que necesitas:

Código:
CREATE TABLE IF NOT EXISTS `employee` (
  `emp_id` int(11) NOT NULL auto_increment,
  `active` tinyint(1) default NULL,
  `banco_id` smallint(6) NOT NULL default '0',
  `id_categoria_gastos` smallint(6) default NULL,
  `id_categoria_ingresos` smallint(6) NOT NULL default '1',
  `id_categoria_nombres` smallint(100) NOT NULL default '0',
  `Fecha` date NOT NULL default '0000-00-00',
  `Ingresos` float NOT NULL default '0',
  `Gastos` float NOT NULL default '0',
  `Diferencia` mediumtext NOT NULL,
  PRIMARY KEY  (`emp_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=723 ;

--
-- Volcar la base de datos para la tabla `employee`
--

INSERT INTO `employee` (`emp_id`, `active`, `banco_id`, `id_categoria_gastos`, `id_categoria_ingresos`, `id_categoria_nombres`, `Fecha`, `Ingresos`, `Gastos`, `Diferencia`) VALUES
(218, NULL, 5, 217, 100, 0, '2009-07-02', 0, 2999, '-147'),
(219, NULL, 5, 100, 145, 0, '2009-07-03', 30, 0, '-147'),
(254, NULL, 2, 167, 100, 0, '2009-06-01', 0, 170, '-147'),
(253, NULL, 4, 100, 132, 0, '2009-06-20', 51.25, 0, '-147'),
(252, NULL, 2, 167, 100, 0, '2009-06-01', 0, 70, '-147'),
(251, NULL, 4, 100, 133, 0, '2009-06-19', 136.57, 0, '-147'),
(250, NULL, 2, 167, 100, 0, '2009-06-01', 0, 170, '-147'),
(249, NULL, 4, 100, 132, 0, '2009-06-13', 4, 0, '-147'),
(248, NULL, 2, 170, 100, 0, '2009-06-01', 0, 1.19, '-147'),
(247, NULL, 4, 100, 147, 0, '2009-06-13', 13, 0, '-147'),
(245, NULL, 2, 192, 100, 0, '2009-06-01', 0, 220.59, '-147'),
(244, NULL, 4, 100, 133, 0, '2009-06-19', 0, 0, '-147'),
(242, 0, 4, 100, 147, 0, '2009-06-06', 11.5, 0, '-147'),
(256, NULL, 4, 100, 147, 0, '2009-06-24', 28, 0, '-147'),
(257, NULL, 4, 100, 147, 0, '2009-06-26', 31, 0, '-147'),
(258, NULL, 4, 100, 147, 0, '2009-06-27', 14, 0, '-147'),
(259, NULL, 4, 100, 146, 0, '2009-07-02', 16, 0, '-147'),
(524, NULL, 1, 100, 134, 0, '2009-04-26', 4, 0, '-147'),
(525, NULL, 1, 120, 114, 0, '2009-07-01', 54, 31.32, '-147');
muchas, muchas gracias
  #8 (permalink)  
Antiguo 09/09/2009, 07:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

Perfecto manupalaya, eso era, pero también regalame la de categoria_gastos y algunos registros.

De esta forma, solo es hacer copy/paste y ya nos concentramos en la consulta.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 09/09/2009, 12:48
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

ay! perdona ha sido un despiste, aqui tienes

Código:
CREATE TABLE IF NOT EXISTS `categoria_gastos` (
  `id_categoria_gastos` smallint(100) NOT NULL default '0',
  `categoria_gastos` varchar(100) default NULL,
  PRIMARY KEY  (`id_categoria_gastos`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `categoria_gastos`
--

INSERT INTO `categoria_gastos` (`id_categoria_gastos`, `categoria_gastos`) VALUES
(156, 'Coche:Gasolina'),
(157, 'Coche:Otros'),
(158, 'Coche:Parking'),
(159, 'Coche:Seguro'),
(160, 'Correos'),
(161, 'Cursos'),
(167, 'Esponsor'),
(168, 'Gas butano'),
(169, 'Gas natural'),
(170, 'Gastos bancarios'),
(171, 'Gestoria'),
(173, 'Hipoteca'),
(174, 'Impresoras'),
(175, 'Impuestos'),
(178, 'Internet'),
(179, 'Jardin'),
(180, 'Limpieza'),
(181, 'Luz'),
(190, 'Mantenimiento'),
(191, 'Mobiliario'),
(192, 'Moviles'),
(217, 'Transferencia');
  #10 (permalink)  
Antiguo 09/09/2009, 13:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

Ahora sí.

Esto es lo que buscas?
Código mysql:
Ver original
  1. mysql> select e.id_categoria_gastos,e.fecha,cg.categoria_gastos,e.gastos from employee e inner join categoria_gastos cg using(id_categoria_gastos);
  2. +---------------------+------------+------------------+--------+
  3. | id_categoria_gastos | fecha      | categoria_gastos | gastos |
  4. +---------------------+------------+------------------+--------+
  5. |                 217 | 2009-07-02 | Transferencia    |   2999 |
  6. |                 167 | 2009-06-01 | Esponsor         |    170 |
  7. |                 167 | 2009-06-01 | Esponsor         |     70 |
  8. |                 167 | 2009-06-01 | Esponsor         |    170 |
  9. |                 170 | 2009-06-01 | Gastos bancarios |   1.19 |
  10. |                 192 | 2009-06-01 | Moviles          | 220.59 |
  11. +---------------------+------------+------------------+--------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql>
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 09/09/2009, 14:24
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

No exactamente, por que deberían estar agrupadas y sumadas, todas las categorias que son iguales en una.

Sería más bien asi:
Código:
#
+---------------------+------------+------------------+--------+
#
        | categoria_gastos     | gastos |
#
+---------------------+------------+------------------+--------+
#
            Transferencia        |   2999 |
#
            Esponsor               |   410 |
#
            Gastos bancarios   |   1.19 |
#
            Moviles                 | 220.59 |
#
+---------------------+------------+------------------+--------+
Observesé como por ejemplo la categoria de Esponsor aunque hay tres, aparece agrupada en una y sumada. Las fechas y el id, tampoco hace falta que aparezca.
  #12 (permalink)  
Antiguo 09/09/2009, 14:27
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

así


Código sql:
Ver original
  1. mysql> SELECT e.id_categoria_gastos,e.fecha,cg.categoria_gastos,SUM(e.gastos) FROM employee e INNER JOIN categoria_gastos cg USING(id_categoria_gastos) GROUP BY e.id_categoria_gastos;
  2. +---------------------+------------+------------------+------------------+
  3. | id_categoria_gastos | fecha      | categoria_gastos | SUM(e.gastos)    |
  4. +---------------------+------------+------------------+------------------+
  5. |                 167 | 2009-06-01 | Esponsor         |              410 |
  6. |                 170 | 2009-06-01 | Gastos bancarios | 1.19000005722046 |
  7. |                 192 | 2009-06-01 | Moviles          | 220.589996337891 |
  8. |                 217 | 2009-07-02 | Transferencia    |             2999 |
  9. +---------------------+------------+------------------+------------------+
  10. 4 ROWS IN SET (0.00 sec)
  11.  
  12. mysql>
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 10/09/2009, 02:29
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

Justo eso es, pero ahora debería mostrar solo el mes que yo quiera, por ejemplo Junio.

He probado de ponerle yo lo de where, bettewn, o adaptarlo con la sentencia que tenia antes, pero no me sale.

:(
  #14 (permalink)  
Antiguo 10/09/2009, 05:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

Que has probado manupalaya?

Como estas tratando de hacer el where?
Que error te sale?

en el where prueba así:

where date_format(fecha,'%Y-%m') = '2009-06'

que sería junio.

Con between desde el primero de junio hasta el 30 también puede ser.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #15 (permalink)  
Antiguo 10/09/2009, 09:46
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

Hola de nuevo,

he probado con el where esto:

Código PHP:
SELECT e.id_categoria_gastos,e.fecha,cg.categoria_gastos,sum(e.gastosFROM employee e INNER JOIN categoria_gastos cg USING(id_categoria_gastosGROUP BY e.id_categoria_gastos WHERE Fecha BETWEEN '2009-06-01' AND '2009-06-31' 
Y me sale este error:
Código:
 MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE Fecha BETWEEN '2009-06-01' AND '2009-06-31'
LIMIT 0, 30' at line 1

Y con la query de date esto:

Código PHP:
SELECT e.id_categoria_gastos,e.fecha,cg.categoria_gastos,sum(e.gastosFROM employee e INNER JOIN categoria_gastos cg USING(id_categoria_gastosGROUP BY e.id_categoria_gastos where date_format(fecha,'%Y-%m') = '2009-06' 
Y con esta me sale este error:

Código:
SELECT e.id_categoria_gastos,e.fecha,cg.categoria_gastos,sum(e.gastos) FROM employee e INNER JOIN categoria_gastos cg USING(id_categoria_gastos) GROUP BY e.id_categoria_gastos where date_format(fecha,'%Y-%m') = '2009-06'

Bueno gracias por tu apoyo, de nuevo :)
  #16 (permalink)  
Antiguo 10/09/2009, 09:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta Mysql - Solo suma una fila

Pon el where antes del group by.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #17 (permalink)  
Antiguo 10/09/2009, 14:12
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Consulta Mysql - Solo suma una fila

Por fin!!!

aqui está el esperado qery:

Código PHP:
 SELECT e.id_categoria_gastose.fechacg.categoria_gastossume.gastos )FROM employee e INNER JOIN categoria_gastos cg USING id_categoria_gastos WHERE Fecha BETWEEN '2009-06-01' AND '2009-06-31' GROUP BY e.id_categoria_gastos LIMIT 0 300 
Huesos52, muchas gracias por tu constante apoyo, no lo hubiera conseguido sin tu ayuda.
La verdad es que veo tus 1976 Mensajes respondidos y solo puedo decir que eres el mejor!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:30.