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

contar elementos de dos tablas

Estas en el tema de contar elementos de dos tablas en el foro de Mysql en Foros del Web. hola como estan; tengo un caso pero no he podido hacerlo, explico tengo 2 tablas una se llama tblhistorico y el otro tblelementos, expongo el ...
  #1 (permalink)  
Antiguo 15/07/2012, 18:23
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 5 meses
Puntos: 1
contar elementos de dos tablas

hola como estan; tengo un caso pero no he podido hacerlo, explico tengo 2 tablas una se llama tblhistorico y el otro tblelementos, expongo el contenido de las 2 tablas

tblhistorico
a
b
c
a
b
d
e
f
b
e


tblelementos
a
c
d
x
e
a
b
d
e


Lo que necesito es lo siguiente de la tabla tblementos extraer elementos unicos y de esos elementos buscarlos en el tabla tblhistorico y realizar cuantas veces se repiten el resultado seria así, ayudenme muchas gracias, necesito entender el tema de union, muchas gracias.

el resultado seria asi

elemento | cantidad
a | 2
b | 3
c | 1
d | 1
e | 2
x | 0


Muchas gracias, Saludos!!!
  #2 (permalink)  
Antiguo 15/07/2012, 18:34
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, 4 meses
Puntos: 2658
Respuesta: contar elementos de dos tablas

Es un tipo de consulta que se ha tratado varias veces durante la última semana. Deberías mirar los posts y ver cuál te sirve.
Esquemáticamente sería:
Código MySQL:
Ver original
  1. SELECT elemento, COUNT(*) cantidad
  2. FROM tblelementos T1 LEFT JOIN tblhistoricos T2 ON T1.idelemento = T2.idelemento
  3. GROUP BY T1.idelemento;
Este esquema es aplicable a cualquier caso semejante, donde haya que contar datos sobre la segunda tabla, cuyos instancias están referidas a una tabla fija o listado base, que está en la primera tabla.
Pueden ser la notas de los estudiantes, las ventas de los vendedores, o las piezas de cada modelo de un automóvil, es igual: El esquema es el mismo, y las variaciones están dadas por las diferentes características de filtrado de los datos aplicados a cada tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/07/2012 a las 18:46
  #3 (permalink)  
Antiguo 15/07/2012, 19:23
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: contar elementos de dos tablas

que tal gnzsoloyo, anexo como tengo estructurado mis tablas y el contenido.


create table tblhistorico(elemento_historico varchar(1) null);
create table tblelementos(elementos varchar(1) null);

insert into tblhistorico(elemento_historico) values ('a'),('b'),('c'),('a'),('b'),('d'),('e'),('f'),(' b'),('e');

insert into tblelementos(elementos) values ('a'),('c'),('d'),('x'),('e'),('a'),('b'),('d'),(' e');


aqui pongo tu query adaptandolo al problema:

SELECT elementos, COUNT(*) cantidad
FROM tblelementos T1 LEFT JOIN tblhistorico T2 ON T1.elementos = T2.elemento_historico
GROUP BY T1.elementos;


y me da el siguiente resultado:
http://www.sqlfiddle.com/#!2/969a7/1

Por lo que veo cuanta tambien los elementos de la tabla tblelementos, yo lo que necesito es que no me cuente los elementos de la tabla tblelementos,

ya habia realizado un query más o menos pero me sigue contando los elementos de la tabla tblelementos con los de la tabla tblhistorico

select elementos, count(*) as cantidad from tblelementos a
inner join tblhistorico b on a.elementos = b.elemento_historico
group by a.elementos asc;


La situación es que quiero nada más me cuente los elementos de la tabla tblhistorico, muchas gracias gnzsoloyo, no puedo hallarle respuesta, le echare una revisada los post que me comentaste, ayudame sip.
Gracias
  #4 (permalink)  
Antiguo 15/07/2012, 20:45
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, 4 meses
Puntos: 2658
Respuesta: contar elementos de dos tablas

Bueno, hay algunas cosas que no se comprenden bien...
Según lo que se entiende, lo que deseas es contar la cantidad de elementos de la tabla histórica, en función de la lista de elementos.
Pero en el conjunto de datos que propones, la tabla de elementos tiene valores repetidos:
Código MySQL:
Ver original
  1. INSERT INTO tblelementos(elementos)
  2.     ('a'),
  3.     ('c'),
  4.     ('d'),
  5.     ('x'),
  6.     ('e'),
  7.     ('a'), -- VALOR REPETIDO
  8.     ('b'),
  9.     ('d'),
  10.     (' e') --VALOR REPETIDO
  11.     ;
Y para obtener una lista de cantidades de cada elemento, se esperaría que la lista de elementos contenga valores únicos... y no es el caso.

Lo que te aparece como "contar los de la tabla de elementos también", es porque esa tabla en realidad es lo que se denomina "bolsa de datos", porque no contiene restricciones de PK tales que permita usarla para cálculos.

Creo que o nos estás dando una adaptación simplificada del esquema real, o bien tienes una tabla con una inconsistencia bastante grave, por cuanto se ha roto la unicidad de clave, y eso es muy serio.

Si la tabla de elementos fuese un auténtico listado discriminado de elementos únicos, como debería serlo, la consulta propuesta daría el resultado correcto. Por eso, lo de que "cuanta tambien los elementos de la tabla tblelementos", es producto de la inconsistencia de los datos.

¿Podrías aclararme por qué hay datos repetidos en esa tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 15/07/2012, 21:03
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: contar elementos de dos tablas

tienes mucha razón sobre la incosistencia de los datos de la tabla tblelementos, lo que pasa es que me heredaron la tabla mal creada desde el inicio y entonces lo que necesito era saber las cantidades que se repetian en la tabla tblhistorico tomando como unicos en la tabla tblelementos, estuve checando unas cosas y tuve que utilizar las famosas vistas y solamente asi lo pude resolver,


create view unicos as select elementos from tblelementos group by elementos;

select elementos, count(*) as cantidad from unicos a
inner join tblhistorico b on a.elementos = b.elemento_historico
group by a.elementos asc;

-- o de la siguiente forma ---

select elemento_historico,count(*) as cantidad from tblhistorico,unicos b
where elemento_historico in(b.elementos) group by elementos asc;



Muchas gracias por tu enorme apoyo como siempre dandonos consejos muy utiles, estoy haciendo una especie de recapitulacion de muchos casos de este foro de mysql y dandole forma para poderlo compartir con todos.

Etiquetas: elementos, tabla, tablas
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 06:42.