Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQL y clausula Count (https://www.clubdelphi.com/foros/showthread.php?t=48022)

karlaoax 13-09-2007 16:05:44

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 :p.

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 :o

kuan-yiu 13-09-2007 16:19:42

La condición Nombre='MONTERREY' debe estar situada dentro del WHERE no dentro del SELECT

Ivanzinho 13-09-2007 16:30:51

Cita:

Empezado por kuan-yiu (Mensaje 230737)
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.

karlaoax 13-09-2007 16:32:39

Cita:

Empezado por kuan-yiu (Mensaje 230737)
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 :confused:

GustavoCruz 13-09-2007 18:14:07

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

kuan-yiu 13-09-2007 18:18:27

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

poliburro 13-09-2007 18:32:46

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

karlaoax 13-09-2007 20:58:49

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 :D

karlaoax 14-09-2007 15:36:21

Gracias:
:D kuan-yiu
:cool: Ivanzinho
:) GustavoCruz
:p 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' :cool:

Karla ;)

karlaoax 14-09-2007 16:51:36

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 :rolleyes:
AND Mexico.estado.Ape_Paterno = 'GARCIA'

kuan-yiu 17-09-2007 09:45:42

Puedes hacerlo sin problemas.

karlaoax 17-09-2007 17:38:34

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?

Delphius 17-09-2007 18:59:43

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,

duilioisola 17-09-2007 19:34:37

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" ???

karlaoax 17-09-2007 19:35:55

Cita:

Empezado por Delphius (Mensaje 231661)
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


La franja horaria es GMT +2. Ahora son las 00:53:44.

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