Foros del Web » Programando para Internet » ASP Clásico »

Varios count en una misma sql:

Estas en el tema de Varios count en una misma sql: en el foro de ASP Clásico en Foros del Web. Buenas: Simplificando, tengo la siguiente estrucutra: -games_secc id | autor_id -games_info id | id_secc Donde games_secc y games_info son dos tablas. Quiero contar, simultaneamente, el ...
  #1 (permalink)  
Antiguo 07/12/2005, 14:48
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 5 meses
Puntos: 0
Varios count en una misma sql:

Buenas:
Simplificando, tengo la siguiente estrucutra:
-games_secc
id | autor_id

-games_info
id | id_secc


Donde games_secc y games_info son dos tablas. Quiero contar, simultaneamente, el numero de campos que hay en games_secc con un determinado autor_id, y además, cuantos registros en games_info asociadios tiene.

Hago lo siguiente:
strSQL6 = "select count(i.id) as info, count(s.id) as secc from games_secc as s, games_info as i "
strSQL6 = strSQL6 & "where (i.id_seccion=s.id and s.autor_id="&intUserID&") group by s.autor_id"


Y aunque esa sql me cuenta bien el numero de campos que hay en la tabla games_info asociados a registros de games_secc pertenecientes a autor_id, me da siempre los mismos valores para el count() de games_secc (vamos, que si sale info=900, sale tambien secc=900 etc.).

No se me ocurre ninguna otra forma de hacerlo, ni tampoco cómo plantear la consulta correctamente.

Gracias por vuestra ayuda
__________________
Tu portal de manga y anime.
  #2 (permalink)  
Antiguo 07/12/2005, 16:32
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Tenia toda la intecion de ayudar, pero de verdad que no entendi, lo lei no menos de 3 veces, algo pasa con el nombre de tus campos, o conmigo que a lo mejor estoy esperando el viernes, pero no entendi nada

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 07/12/2005, 16:44
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Segun entendi, kieres saber cuantos games_secc hay para un determinado autor y ademas en cuantos game_info estan los id de game_secc



tal vez sea algo asi

Código:
select 
	count(distinct  s.id) as secc,count(i.id) as info,  
from 
	games_secc s, games_info i 
Where 
	i.id_seccion=s.id and s.autor_id="&intUserID&"


o así

select 
	count(distinct  s.id) as secc,count(i.id) as info,  
from 
	games_secc s inner join games_info i 
on
	i.id_seccion=s.id 
where	
	s.autor_id="&intUserID&"

aunque esta consulta tal vez seria mejor que la postearas en bases de datos... te podran ayudar mejor...

un saludo
  #4 (permalink)  
Antiguo 08/12/2005, 13:22
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 5 meses
Puntos: 0
Cita:
Iniciado por u_goldman
Tenia toda la intecion de ayudar, pero de verdad que no entendi, lo lei no menos de 3 veces, algo pasa con el nombre de tus campos, o conmigo que a lo mejor estoy esperando el viernes, pero no entendi nada

Salu2,
Veamos, voy a tratar de explicarlo mejor, que con lo mal que está la DB estructurada es dificil entender.

En la tabla games_secc imaginemos que yo meto lo siguiente:
games_secc
id | id_autor
1 3
2 5

Y luego en games_info
id | id_secc
1 1
2 1
. .
n 1
n+1 2

Entonces, yo quiero sacar que el usuario 3 tiene 1 campo en games_secc y n campos en games_info , y que el usuario 5 tiene un campo en games_secc y otro en games_info.
Espero que así se vea más claro.

Andres95, voy a probar ahora mismo tu código, a ver si sirve. Gracias por la ayuda :P

EDIT: Las consultas no funcionan, porque el count(DISTINCT s.id) me da error >_<
__________________
Tu portal de manga y anime.

Última edición por meru-kun; 08/12/2005 a las 13:32
  #5 (permalink)  
Antiguo 09/12/2005, 21:08
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Yo no veo relación entre las tablas, ¿o acaso el campo id en la tabla games_info es en realidad el id_autor?
  #6 (permalink)  
Antiguo 10/12/2005, 08:36
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 5 meses
Puntos: 0
Cita:
Iniciado por Myakire
Yo no veo relación entre las tablas, ¿o acaso el campo id en la tabla games_info es en realidad el id_autor?
Ya digo que la construcción de esas tablas está un poco mal hecha.

Pero la relación es la qe he puesto en el ejemplo.

En el id_secc (de la tabla games_info) va alguno de los valores id (de games_secc)

El id de games_info es simplemente un campo autonumerico.

Si creo una sección en games_secc con id=6, y le meto contenidos, entonces tendré varios registros en games_info con id_secc=6.

Espero que así se vea mejor >_<
__________________
Tu portal de manga y anime.
  #7 (permalink)  
Antiguo 12/12/2005, 17:09
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Cita:
Iniciado por meru-kun
Veamos, voy a tratar de explicarlo mejor, que con lo mal
Andres95, voy a probar ahora mismo tu código, a ver si sirve. Gracias por la ayuda :P

EDIT: Las consultas no funcionan, porque el count(DISTINCT s.id) me da error >_<

Pues a mi no me envia error... mira hice un pequeño ejemplo de como te entendi....a lo mejor no es parecido...

Código:
create table tbl_prueba1 (id_uno int, desc_uno varchar (8) )
create table tbl_prueba2 (id_dos int, desc_dos varchar (8) )

insert into tbl_prueba1 values(1,'usuario1')
insert into tbl_prueba1 values(2,'usuario1')
insert into tbl_prueba1 values(3,'usuario1')
insert into tbl_prueba1 values(4,'usuario1')
insert into tbl_prueba1 values(5,'usuario1')
insert into tbl_prueba1 values(6,'usuario2')
insert into tbl_prueba1 values(7,'usuario2')
insert into tbl_prueba1 values(8,'usuario2')
insert into tbl_prueba1 values(9,'usuario2')
insert into tbl_prueba1 values(10,'usuario2')
insert into tbl_prueba2 values(1,'otro_id')
insert into tbl_prueba2 values(2,'otro_id')
insert into tbl_prueba2 values(1,'otro_id')
insert into tbl_prueba2 values(3,'otro_id')
insert into tbl_prueba2 values(3,'otro_id')
insert into tbl_prueba2 values(1,'otro_id')
insert into tbl_prueba2 values(4,'otro_id')
insert into tbl_prueba2 values(5,'otro_id')
insert into tbl_prueba2 values(6,'otro_id')
insert into tbl_prueba2 values(6,'otro_id')
insert into tbl_prueba2 values(7,'otro_id')
insert into tbl_prueba2 values(8,'otro_id')
insert into tbl_prueba2 values(7,'otro_id')
insert into tbl_prueba2 values(9,'otro_id')
insert into tbl_prueba2 values(10,'otro_id')
insert into tbl_prueba2 values(9,'otro_id')


select count (distinct id_uno) as Total_tbl_prueba1, count (id_dos) as Total_tbl_prueba2
from 
       tbl_prueba1 
inner join
	tbl_prueba2
on 	
	id_uno = id_dos
where 
	desc_uno = 'usuario1'





'---------------------------------------------------------------------------------------
 Resultado:
 

 Total_tbl_prueba1 Total_tbl_prueba2 
 ----------------- ----------------- 
 5                 8

'---------------------------------------------------------------------------------------
  #8 (permalink)  
Antiguo 12/12/2005, 17:38
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 5 meses
Puntos: 0
Andres95, muchas gracias por el interés que estás mostrando.

Mira, he intentado ejecutar esta query:
Código:
strSQL6 = "select count(distinct  s.id) as secc,count(i.id) as info,  from games_secc s inner join games_info as i on i.id_seccion=s.id where	s.autor_id=3"
Y me da este error:
Código:
[Microsoft][Controlador ODBC Microsoft Access] Error de sintaxis (falta operador) en la expresión de consulta 'count(distinct id)'.

La única diferencia respecto a tú codigo es que tengo que usar los "alias" s, i porque tengo el campo ID igual en las dos tablas.
¿Quizá un error del driver de Access? (precisamente hago esto para luego migrar todo a MySQL >_<).

Muchas gracias de nuevo por tu tiempo.
__________________
Tu portal de manga y anime.
  #9 (permalink)  
Antiguo 12/12/2005, 18:05
Avatar de tomchat  
Fecha de Ingreso: septiembre-2005
Mensajes: 231
Antigüedad: 18 años, 7 meses
Puntos: 0
Pues simplemente estas tratando de tomas 2 resultados en una misma sentencia sql y siempre te dara uno, entiendes. Pero parece que esas tablas no tienen relacion entonces por que deseas hacer eso. Yo creo que no es obtimo. En todo caso utiliza INNER JOIN... Pero debes ver cuales son tus campos de realcion entre las tablas.


Ah por cierto tu error se debe ha esto (count(distinct s.id) as secc,count(i.id)), existe un campo s y despues le asignas un compo (secc), he imvocas a otro campo despues de haber utilizado en Distinct, en este caso solo utilizalo cuando haces referencia a un solo campo.

Última edición por tomchat; 12/12/2005 a las 18:13
  #10 (permalink)  
Antiguo 13/12/2005, 12:26
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Cita:
Iniciado por meru-kun
Y me da este error:
Código:
[Microsoft][Controlador ODBC Microsoft Access] Error de sintaxis (falta operador) en la expresión de consulta 'count(distinct id)'.
La única diferencia respecto a tú codigo es que tengo que usar los "alias" s, i porque tengo el campo ID igual en las dos tablas.
¿Quizá un error del driver de Access? (precisamente hago esto para luego migrar todo a MySQL >_<).
Bueno pues si, es precisamente porque usas access.. al parecer no acepta el distinct dentro de una funcion (como es el caso de count) y el ejemplo anterior lo realicé con SQL Server 2000.

En access la unica forma que se me ocurrio de momento es hacer una subconsulta. aunque podria haber otras formas mas optimas esta si me da el mismo resultado que el ejemplo anterior.

Código:
SELECT 
	Count(m.expr1) AS CuentaGames_Secc
	,sum(m.Expr2) AS CuentaGames_Info
FROM 
	[
	SELECT 
		games_secc.id as expr1, count(games_info.id) AS Expr2
	FROM 
		games_secc INNER JOIN games_info ON games_secc.id = games_info.id
	WHERE 
		(games_secc.id_autor=3)
	GROUP BY games_secc.id
	]. AS m;

Seria reemplazar el 3 por el id del usuario que requieres.

Y bueno en mysql ya no te podria decir ya que no lo he utilizado.


Un saludo!
  #11 (permalink)  
Antiguo 16/12/2005, 16:31
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 5 meses
Puntos: 0
No se que pasa, pero con tu última consulta, tu Query me devuelve, de nuevo, el mismo número para CuentaGames_Secc y CuentaGames_Info (en concreto, me devuelve para ambos el valor de CuentaGames_Secc).

Si quieres (por favor >_<) te paso la estructura de mi tabla (un archivo de access, vamos) para que veas como está puesto, e igual así consigamos sacar donde puede estar el error. Si aceptas, hazmelo saber por un MP.

Muchas gracias por todo, Andres95
__________________
Tu portal de manga y anime.
  #12 (permalink)  
Antiguo 09/06/2015, 12:36
 
Fecha de Ingreso: junio-2015
Mensajes: 1
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Varios count en una misma sql:

Hola, por qué no pruebas con un select después del primer count, yo hice algo similar, te dejo mi solución (ya tu lo pruebas con tus campos):

select count (distinct tuto.id_alumno) as cantAlumnos, (select count(distinct tuto.id_tutor) as canTutor from perfil per2, tutoria_consejeria.tutoria tuto where tuto.id_tutor=per2.id_perfil) as canTutor
from perfil per, perfil per2,
tutoria_consejeria.tutoria tuto, tutoria_consejeria.tutoria tu
where tuto.id_alumno= per.id_perfil and tu.id_tutor=per2.id_perfil


A mí me funcionó, espero te ayude en algo.
Saludos

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