Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Question SQL y clausula Count

Hola a todos, alguien me podria orientar con este codigo?
Lo unico que estoy haciendo es contar (COUNT) de un estado de Mexico, cuantos clientes corresponden a dicho estado.
Lo estoy haciendo con 2 tablas unidos por Campo REGION

Mexico=Base de Datos
estado= Tabla estado con sus campos Nombre,Region
cliente= Tabla cliente de un estado cualquiera, region es su campo
Código SQL [-]
SELECT
  Mexico.estado.region,  
  Mexico.cliente.region
FROM
  Mexico.estado,
  Mexico.cliente
WHERE
  Mexico.cliente.region = Mexico.estado.region 
AND
  Mexico.estado.region = 'NORTE'
Hasta el codigo de arriba bien, al hacer mi consulta si me muestra todos los clientes que corresponden a la region NORTE .

Ahora:
Con este codigo, voy a contar los registros que sean de la region NORTE, pero de la ciudad de MONTERREY
Código SQL [-]
SELECT
  Mexico.estado.region,
  COUNT(Mexico.estado.region)AND Nombre='MONTERREY',
  Mexico.cliente.region
FROM
  Mexico.estado,
  Mexico.cliente
WHERE
  Mexico.cliente.region = Mexico.estado.region 
AND
  Mexico.estado.region = 'NORTE'

El problema es que siempre me saca de mi tabla cliente, los registros que sean iguales a mi tabla estado, o sea, no me cuenta solo aquellos clientes que sean exclusivamente de Monterrey. No hace la seleccion solo de Monterrey.

si tengo 15 clientes en todo el norte ok, pero si de Monterrey tengo solo 7, siempre me muestra los 15.

Creo que estoy implementando mal la opcion:
COUNT(Mexico.estado.region)AND Nombre='MONTERREY'.

Ya cheque de varia formas y siempre me salen los 15 clientes.

Alguna sugerencia?

Gracias. Karla
Responder Con Cita
  #2  
Antiguo 13-09-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
La condición Nombre='MONTERREY' debe estar situada dentro del WHERE no dentro del SELECT
Responder Con Cita
  #3  
Antiguo 13-09-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por kuan-yiu Ver Mensaje
La condición Nombre='MONTERREY' debe estar situada dentro del WHERE no dentro del SELECT
Aparte deberás introducir un group by Mexico.estado.region,Mexico.cliente.region

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #4  
Antiguo 13-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Cita:
Empezado por kuan-yiu Ver Mensaje
La condición Nombre='MONTERREY' debe estar situada dentro del WHERE no dentro del SELECT
MIRA:
Código SQL [-]
SELECT
  Mexico.estado.region,
  COUNT(Mexico.estado.region),
  Mexico.cliente.region
FROM
  Mexico.estado,
  Mexico.cliente
WHERE
  Mexico.cliente.region = Mexico.estado.region 
AND
  Mexico.estado.region = 'NORTE'
AND Mexico.estado.Nombre = 'MONTERREY'
GROUP BY Mexico.estado.region ,Mexico.cliente.region

Ya lo habia intentado, y el resultado es cero 0

Última edición por karlaoax fecha: 13-09-2007 a las 16:34:59.
Responder Con Cita
  #5  
Antiguo 13-09-2007
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
SQL y clausula Count

Hola, karlaoax; esto debería funcionar correctamente

Código SQL [-]
select mexico.estado.region, mexico.cliente.region, count(*) from Mexico.estado, 
Mexico.cliente where mexico.estado.region= mexico.cliente.region 
and Mexico.estado.region = 'NORTE'
and Mexico.estado.Nombre = 'MONTERREY' 
group by Mexico.estado.Nombre,Mexico.estado.region,
mexico.cliente.region

aunque la consulta te estaría arrogando los mismos datos en región =
'NORTE', bueno tu luego haras la consulta a tus necesidades
Responder Con Cita
  #6  
Antiguo 13-09-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
A mi me funciona perfectamente.
Yo he hecho esto con las tablas que tengo y muestra perfectamente los datos.
Código SQL [-]
SELECT
  c.nombre,COUNT(c.nombre),s.codigo_cliente
FROM
  miEspacio.cliente c,
  miEspacio.solicitud s
WHERE
  c.codigo = S.codigo_cliente 
AND
  c.pais = 'ESPAÑA' and c.estado_civil='C'
GROUP BY C.NOMBRE,S.CODIGO_CLIENTE
Sería más claro que usases alias para que las sentencias no sean tan largas, además no sé para qué necesitas la región 2 veces en el resultado (de la tabla "estado" y de la tabla "cliente").
Traducido a tus tablas creo que sería algo así:
Código SQL [-]
SELECT
  e.region,COUNT(e.region),c.region
FROM
  Mexico.estado e,
  Mexico.cliente c
WHERE
  c.region = e.region 
AND
  e.region = 'NORTE' AND e.Nombre = 'MONTERREY'
GROUP BY e.region,c.region
Responder Con Cita
  #7  
Antiguo 13-09-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Sale, esto te debe funcionar

Código SQL [-]
 
    Select Estado.Region, Count(*) As Cuantos
      From Mexico.Estado As Estado
Inner Join Mexico.Cliente As Cliente
        On Estado.Region = Cliente.Region
     Where Estado.Region = 'NORTE' And
           Estado.Nombre = 'MONTERREY'
  Group By Estado.Region
__________________
Conoce mi blog http://www.edgartec.com

Última edición por poliburro fecha: 13-09-2007 a las 18:36:10. Razón: La indentación quedó fatal
Responder Con Cita
  #8  
Antiguo 13-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
gracias a todos por ayudarme.
Ahora si ya no tengo pacientes por atender, voy a dedicarle tiempo a ver el error que tengo, y analizar sus soluciones.

Al rato posteo los resultados
Responder Con Cita
  #9  
Antiguo 14-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Gracias:
kuan-yiu
Ivanzinho
GustavoCruz
poliburro

Con su apoyo ya pude resolver el error que tenia, y efectivamente lo que tenia mal era mal colocada mi condicion:
Mexico.estado.Nombre = 'MONTERREY'

Karla
Responder Con Cita
  #10  
Antiguo 14-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Aunque me queda una duda, cuando agrego mas campos a la consulta, me arroja mis valores en blanco

Código SQL [-]
SELECT
  Mexico.estado.region,
  COUNT(Mexico.estado.region),
  COUNT(Mexico.estado.Ape_Paterno),
  Mexico.cliente.region
FROM
  Mexico.estado,
  Mexico.cliente
WHERE
  Mexico.cliente.region = Mexico.estado.region 
AND
  Mexico.estado.region = 'NORTE'
AND 
  Mexico.estado.Nombre = 'MONTERREY'
AND
  Mexico.estado.Ape_Paterno = 'GARCIA'
GROUP BY Mexico.cliente.region, Mexico.estado.region,Mexico.estado.Ape_Paterno

Se puede implementar mas condiciones AND como lo estoy haciendo en mi ejemplo ? o estoy cometiendo un error
AND Mexico.estado.Ape_Paterno = 'GARCIA'

Última edición por karlaoax fecha: 14-09-2007 a las 17:02:29.
Responder Con Cita
  #11  
Antiguo 17-09-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Puedes hacerlo sin problemas.
Responder Con Cita
  #12  
Antiguo 17-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Lo he hecho pero mis resultados sonm en blanco:
Código SQL [-]
WHERE
  Mexico.cliente.region = Mexico.estado.region 
AND
  Mexico.estado.region = 'NORTE'
AND 
  Mexico.estado.Nombre = 'MONTERREY'
AND
  Mexico.estado.Ape_Paterno = 'GARCIA'
AND 
  Mexico.estado.Ape_Materno = 'ESTRADA'
AND 
  Mexico.estado.Nombre_cli = 'ALEJANDRO'GROUP BY Mexico.cliente.region,Mexico.estado.region,Mexico.estado.Ape_Paterno,Mexico.estado.Ape_Materno,Mexico.estado.nombre_cli

Alguna idea del error que me marca?
Responder Con Cita
  #13  
Antiguo 17-09-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola karlaoax.
Tu consulta debería funcionar.

¿Dices que la consulta no te devuelve ningún registro? Si es así asegúrate de que tengas registros que cumplan la condición lógica impuesta.

Por otro lado me llama la atención el nivel de agrupamiento.. puede que alli esté el error. Por lo general no es deseable, ni tiene sentido, realizar un agrupamiento mayor a 3 niveles.

Y hablando de error ¿A que dices le dices error: al hecho de que no te devuelva registros, o a que verdaderamente te arroja un error?
Si realmente te devuelve un error, sería oportuno que nos indique el texto completo de dicho error (y/o el número identificador).

Como sugerencia, no es obligatorio anteponer la base de datos. Si trabajas con DBE, esto se hará automáticamente si el DBE lo vee necesario. Sólo se debe anteponer la base de datos en caso de estar haciendo consultas a distintas bases de datos. Es lo mismo hacer:
Código SQL [-]
select * from base.tabla ...
que
Código SQL [-]
select * from tabla ...

Para finalizar ¿En que base de datos estás trabajando y que componentes estás empleando?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 17-09-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
A mi me llama la atención lo siguiente :
Código SQL [-]
AND
  Mexico.estado.Ape_Paterno = 'GARCIA'
AND 
  Mexico.estado.Ape_Materno = 'ESTRADA'
AND 
  Mexico.estado.Nombre_cli = 'ALEJANDRO'

Los apellidos y el nombre, son de la tabla "estado" o de la tabla "cliente" ???
Responder Con Cita
  #15  
Antiguo 17-09-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
1.- ¿Dices que la consulta no te devuelve ningún registro? Si es así asegúrate de que tengas registros que cumplan la condición lógica impuesta.

2.- Y hablando de error ¿A que dices le dices error: al hecho de que no te devuelva registros, o a que verdaderamente te arroja un error?

3.- Para finalizar ¿En que base de datos estás trabajando y que componentes estás empleando?
1.- Si, no muestra ningun registro con la condicion, aun cuando hay varios que cumplen con la misma.

2.- Sin registro, no muestra ningun mensjae de error

3.- Utilizo MySQL + Mydac
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
clausula COUNT con Mysql karlaoax SQL 1 08-08-2007 04:23:27
Clausula Like JoseAntonio SQL 5 27-05-2007 07:28:47
Clausula LIKE federiconqn21 SQL 3 28-12-2005 15:49:13
Delete sin clausula where Fita Conexión con bases de datos 2 06-07-2005 01:35:04
Clausula UNION TJose Firebird e Interbase 3 15-05-2003 20:59:56


La franja horaria es GMT +2. Ahora son las 11:36:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi