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

consulta sobre un select

Estas en el tema de consulta sobre un select en el foro de Mysql en Foros del Web. Hola gente, estoy haciendo este select: select sede,anio,periodo, count(tituloID) from titulo where anio is not null group by sede, anio,periodo; yo se que los periodos ...
  #1 (permalink)  
Antiguo 09/10/2009, 11:52
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
consulta sobre un select

Hola gente, estoy haciendo este select:

select sede,anio,periodo, count(tituloID) from titulo where anio is not null group by sede, anio,periodo;


yo se que los periodos del año son 4 y quiero que me muestre cuantos titulos hay en cada periodo por cada sede y que si no hay titulo en determinado periodo muentre 0 el problema es que si una sede no ingreso titulos en un periodo, ese periodo no aparece directamente, hay alguna manera de lograr lo que quiero?

muchas gracias desde ya
  #2 (permalink)  
Antiguo 09/10/2009, 17:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta sobre un select

Existe una función que te devuelve el número de trimestre de una fecha (QUARTER(fecha) ), pero para usarla es necesario que exista una fecha de ingreso.
¿Existe?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/10/2009, 06:12
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: consulta sobre un select

Gracias, pero creo que no me sirve, porq no necesariamente la fecha de ingreso me tiene que coincidir con el periodo del año al que se asigna el titulo.
El año y el periodo los tengo como datos, el tema es que si no hay titulo para determinado periodo, en lugar de mostrarme cero, que es lo que yo quiero, no me muestra el periodo.

Ej:
sede anio periodo cantidad
1 2008 1 2
1 2008 2 0
1 2008 3 0
1 2008 4 0

asi es como quiero que me muestre los datos, pero como esta la consulta ahora me muestra solo el primer registro!!

Última edición por Jesica; 14/10/2009 a las 06:30
  #4 (permalink)  
Antiguo 14/10/2009, 06:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta sobre un select

No es exactemente lo que pides pero te puede servir....


Código sql:
Ver original
  1. SELECT anio,
  2.           sede,
  3.           SUM(IF(periodo=1,1,0)) AS Periodo1,
  4.           SUM(IF(periodo=2,1,0)) AS Periodo2,
  5.           SUM(IF(periodo=3,1,0)) AS Periodo3,
  6.           SUM(IF(periodo=4,1,0)) AS Periodo4,
  7.           COUNT(*) AS Total
  8. FROM titulo
  9. WHERE anio IS NOT NULL
  10. GROUP BY sede, anio;

Obviamente deberas cambiar el condicional en función del contenido del campo periodo....

Mira si así te substituye nulos por ceros...


Código sql:
Ver original
  1. SELECT anio,
  2.           sede,
  3.           ISNULL(SUM(IF(periodo=1,1,0)),0) AS Periodo1,
  4.           ISNULL(SUM(IF(periodo=2,1,0)),0) AS Periodo2,
  5.           ISNULL(SUM(IF(periodo=3,1,0)),0) AS Periodo3,
  6.           ISNULL(SUM(IF(periodo=4,1,0)),0) AS Periodo4,
  7.           COUNT(*) AS Total
  8. FROM titulo
  9. WHERE anio IS NOT NULL
  10. GROUP BY sede, anio;


Quim
  #5 (permalink)  
Antiguo 14/10/2009, 07:23
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 sobre un select

Una pequeña corrección:

ISNULL es una función que recibe un solo parametro de entrada y retorna 1 si es nulo o cero (0) si es diferente de null.
Para la idea que da quimv creo que la función a utilizar es IFNULL que si pondría el cero en caso de que encuentre el null.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 14/10/2009, 09:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta sobre un select

Toda la razón huesos y esta era la intención al contestar.... grácias por la corrección.


Cita:
IFNULL(expr1,expr2)

If expr1 is not NULL, IFNULL() returns expr1; otherwise it returns expr2. IFNULL() returns a numeric or string value, depending on the context in which it is used.

mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'
Quim

Última edición por quimfv; 15/10/2009 a las 01:57
  #7 (permalink)  
Antiguo 14/10/2009, 11:13
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: consulta sobre un select

Con esta consulta me devuelve registros repetidos...

por ejemplo:
sede - año - periodo1 - periodo2 - periodo3 - periodo4 - cantidad
2 --- 2008 --- 0 -------- 1 ------- 0 ------ 0 -------- 1
2 --- 2008 --- 0 -------- 0 ------- 0 ------ 1 -------- 1

y tampoco es lo que quiero, porque aca me esta diciendo que para determinada sede, en el año 2008 hay un titulo en el periodo 2 y otro en el 4, pero no me dice que en los otros periodos no hay nada.
Yo lo que quiero es que en un solo registro me diga la cantidad que tiene por periodo, asi:
sede - anio - periodo - cantidad
2 --- 2008 ---- 1 ------ 2
2 --- 2008 ---- 2 ------ 0
2 --- 2008 ---- 3 ------ 0
2 --- 2008 ---- 4 ------ 0

5 --- 2009 ---- 1 ------ 5
5 --- 2009 ---- 2 ------ 13
5 --- 2009 ---- 3 ------ 0
5 --- 2009 ---- 4 ------ 1
  #8 (permalink)  
Antiguo 14/10/2009, 12:23
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 sobre un select

Vos queres mostrar registros que no existen en la base de datos?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 14/10/2009, 12:29
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: consulta sobre un select

en realidad, quiero que si no existe el registro me muestre cero... pero ya estoy pensando en hacerlo dinamicamente en el sistema, porq esto se me esta complicando...

Última edición por Jesica; 14/10/2009 a las 12:40
  #10 (permalink)  
Antiguo 15/10/2009, 02:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta sobre un select

Cita:
Con esta consulta me devuelve registros repetidos...

por ejemplo:
sede - año - periodo1 - periodo2 - periodo3 - periodo4 - cantidad
2 --- 2008 --- 0 -------- 1 ------- 0 ------ 0 -------- 1
2 --- 2008 --- 0 -------- 0 ------- 0 ------ 1 -------- 1
No.. deberia responder

sede - año - periodo1 - periodo2 - periodo3 - periodo4 - cantidad
2 --- 2008 --- 0 -------- 1 ------- 0 ------ 1 -------- 2


Código sql:
Ver original
  1. SELECT anio,
  2.           sede,
  3.           IFNULL(SUM(IF(periodo=1,1,0)),0) AS Periodo1,
  4.           IFNULL(SUM(IF(periodo=2,1,0)),0) AS Periodo2,
  5.           IFNULL(SUM(IF(periodo=3,1,0)),0) AS Periodo3,
  6.           IFNULL(SUM(IF(periodo=4,1,0)),0) AS Periodo4,
  7.           COUNT(*) AS Total
  8. FROM titulo
  9. WHERE anio IS NOT NULL
  10. GROUP BY sede, anio;


Puesto que agregamos por sede y anio (GROUP BY sede, anio)

Quim
  #11 (permalink)  
Antiguo 15/10/2009, 06:53
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: consulta sobre un select

Gracias, es cierto, no mire el tema del group by, ahi nme devuelve como vos decis!
Muchas gracias
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 14:28.