Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Importe total facturado por año con consulta SQL en MySQL
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Importe total facturado por año con consulta SQL en MySQL

Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Importe total facturado por año con consulta SQL en MySQL Responder citando

¿Qué consulta SQL debo ejecutar para sacar el importe total facturado por año? utilizo como motor de base de datos MySQL.

Los campos a utilizar: ImporteTotal, Fecha, la tabla se llama "factura".

Lo que quiero es sacar algo así:

Año Importe Total
----- -----------------
2007 10000,00 euros
2008 12000,00 euros
2009 14000,00 euros
MensajePublicado:
Vie Abr 24, 2009 4:49 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



varios escribió:
¿Qué consulta SQL debo ejecutar para sacar el importe total facturado por año? utilizo como motor de base de datos MySQL.

Los campos a utilizar: ImporteTotal, Fecha, la tabla se llama "factura".

Lo que quiero es sacar algo así:

Año Importe Total
----- -----------------
2007 10000,00 euros
2008 12000,00 euros
2009 14000,00 euros



Para sacar el importe total por año puedes utilizar la función MySQL "Extract", con la sintaxis para el año: "extract (year from nombre_campo).

La consulta SQL a utilizar en MySQL:

Código:

SELECT EXTRACT(YEAR FROM fecha) Año,
    sum(importetotal) "Importe Total"
FROM factura
GROUP BY EXTRACT(YEAR FROM fecha)
ORDER BY Año DESC
MensajePublicado:
Vie Abr 24, 2009 4:52 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



alonsojpd escribió:
Para sacar el importe total por año puedes utilizar la función MySQL "Extract", con la sintaxis para el año: "extract (year from nombre_campo).

La consulta SQL a utilizar en MySQL:

Código:

SELECT EXTRACT(YEAR FROM fecha) Año,
    sum(importetotal) "Importe Total"
FROM factura
GROUP BY EXTRACT(YEAR FROM fecha)
ORDER BY Año DESC


Ok, me funciona perfectamente.

¿Cómo podría sacar el importe facturado por mes de un año concreto?
MensajePublicado:
Vie Abr 24, 2009 4:54 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



varios escribió:
Ok, me funciona perfectamente.

¿Cómo podría sacar el importe facturado por mes de un año concreto?


Puedes utilizar esta otra consulta SQL:

Código:

SELECT EXTRACT(YEAR_MONTH FROM fecha) Mes,
    sum(importetotal) "Importe Total"
FROM factura
WHERE EXTRACT(YEAR FROM fecha) = 2009
GROUP BY EXTRACT(YEAR_MONTH FROM fecha)
ORDER BY Mes ASC


Esta consulta mostrará algo así:

Mes Importe total
----- ---------------
200901 350,12
200902 150,44
200903 289,14
200904 399,74

(es útil cuando no filtramos por año en la consulta SQL).

Para mostrar sólo el número de mes (sin el año):

Código:

SELECT EXTRACT(MONTH FROM fecha) Mes,
    sum(importetotal) "Importe Total"
FROM factura
WHERE EXTRACT(YEAR FROM fecha) = 2009
GROUP BY EXTRACT(MONTH FROM fecha)
ORDER BY Mes ASC


que mostrará algo así:

Mes Importe total
----- ---------------
1 350,12
2 150,44
3 289,14
4 399,74

Para mostrar el nombre del mes en vez del número:

Código:

SELECT MONTHNAME(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) Mes,
    sum(importetotal) "Importe Total"
FROM factura
WHERE EXTRACT(YEAR FROM fecha) = 2009
GROUP BY EXTRACT(MONTH FROM fecha)


Te mostrará algo así:

Mes Importe total
----- ---------------
January 350,12
February 150,44
March 289,14
April 399,74

El inconveniente evidente es que te mostrará el nombre de los meses en inglés.

Una solución rápida (tal vez haya otras más elegantes):

Código:

SELECT
CASE WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 1 THEN "Enero"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 2 THEN "Febrero"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 3 THEN "Marzo"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 4 THEN "Abril"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 5 THEN "Mayo"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 6 THEN "Junio"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 7 THEN "Julio"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 8 THEN "Agosto"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 9 THEN "Septiembre"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 10 THEN "Octubre"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 11 THEN "Noviembre"
WHEN MONTH(CONCAT('2009-', EXTRACT(MONTH FROM fecha), '-1')) = 12 THEN "Diciembre"
ELSE "Error en el mes"
END Mes,
    sum(importetotal) "Importe Total"
FROM factura
WHERE EXTRACT(YEAR FROM fecha) = 2009
GROUP BY EXTRACT(MONTH FROM fecha)
MensajePublicado:
Vie Abr 24, 2009 4:59 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



Ok, ¿hay alguna forma más elegante de mostrar los nombres de los meses en español en MySQL?
MensajePublicado:
Dom Abr 26, 2009 4:27 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



varios escribió:
Ok, ¿hay alguna forma más elegante de mostrar los nombres de los meses en español en MySQL?


Sí, las funciones de MySQL "DATE_FORMAT ()", "DAYNAME ()" y "MONTHNAME ()" devuelven los nombres de los días y los meses en el idioma establecido en la variable de MySQL lc_time_names. Si cambias el valor de esta variable a "es_ES" verás que los nombres te los muestra en español.

Para ver el valor actual de la variable lc_time_names:

Código:

SELECT @@lc_time_names


Para cambiar el valor de la variable lc_time_names de forma dinámica:

Código:

SET @@lc_time_names='es_ES'


Por defecto, tras la instalación de MySQL Server, el valor de esta variable es "en_US".
MensajePublicado:
Dom Abr 26, 2009 4:32 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



alonsojpd escribió:
varios escribió:
Ok, ¿hay alguna forma más elegante de mostrar los nombres de los meses en español en MySQL?


Sí, las funciones de MySQL "DATE_FORMAT ()", "DAYNAME ()" y "MONTHNAME ()" devuelven los nombres de los días y los meses en el idioma establecido en la variable de MySQL lc_time_names. Si cambias el valor de esta variable a "es_ES" verás que los nombres te los muestra en español.

Para ver el valor actual de la variable lc_time_names:

Código:

SELECT @@lc_time_names


Para cambiar el valor de la variable lc_time_names de forma dinámica:

Código:

SET @@lc_time_names='es_ES'


Por defecto, tras la instalación de MySQL Server, el valor de esta variable es "en_US".


Ok, me funciona bien, cuando ejecuto Set @@lc_time_names='es_ES', pero si cierro la aplicación que utilizo y la vuelvo a abrir me vuelve a aparecer en "en_US" ¿tengo que ejecutar siempre el Set? ¿hay alguna forma de que este valor se quede guardado para todas las apliciones (para todo MySQL)?
MensajePublicado:
Dom Abr 26, 2009 4:38 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Importe total facturado por año con consulta SQL en MySQ Responder citando



Anuncios



varios escribió:
Ok, me funciona bien, cuando ejecuto Set @@lc_time_names='es_ES', pero si cierro la aplicación que utilizo y la vuelvo a abrir me vuelve a aparecer en "en_US" ¿tengo que ejecutar siempre el Set? ¿hay alguna forma de que este valor se quede guardado para todas las apliciones (para todo MySQL)?


Sí, es suficiente con que añadas la siguiente línea al final del fichero my.ini que estará en la carpeta de instalación de MySQL Server, por defecto en Windows:

C:\Archivos de programa\MySQL\MySQL Server 5.1\my.ini

Lo abres con cualquier editor de texto plano y añades lo siguiente:

Código:

lc_time_names=es_ES


Guardas las modificaciones del fichero my.ini y para que los cambios tengan efecto deberás detener e iniciar el servicio de MySQL. Si tu base de datos está en producción recuerda que cuando detienes el servicio se cortan las conexiones actuales, por lo que es recomendable hacerlo en un momento en que no haya usuarios conectados.
MensajePublicado:
Dom Abr 26, 2009 4:42 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A