Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/07/2008, 23:32
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Select where media + alta y + votos

Creo que va al final, pero no con where, sino tras ese HAVING último que ya tienes (WHERE no se puede poner tras GROUP BY), y también tras el HAVING de la consulta interior para sacar los votadoid que tienen esas medias. Te quedará algo así.

Cita:
SELECT v2.votadoid, COUNT(v2.votadoid) AS numervotos, AVG(v2.votos) AS mediavotos FROM votar v2 GROUP BY v2.votadoid HAVING COUNT(v2.votadoid) = (SELECT MAX(T1.numvotos) AS num FROM (SELECT COUNT(v.votadoid) as numvotos, AVG(v.votos) AS media FROM `votar` v GROUP BY v.votadoid HAVING AVG(v.votos) >=8 AND v.votadocateg=chistestexto)T1) AND AVG(v2.votos) >=8 AND v2.votadocateg=chistestexto
Te lo aclaro por partes
1) Averiguo los número de votos de cada votadoid cuya media supera o iguala 8: SELECT COUNT(v.votadoid) as numvotos, AVG(v.votos) AS media FROM `votar` v GROUP BY v.votadoid HAVING AVG(v.votos) >=8 AND v.votadocateg=chistestexto
2) Saco el mayor de ellos y para eso tengo que poner un alias (T1) a la consulta anterior:
SELECT MAX(T1.numvotos) AS num FROM (SELECT COUNT(v.votadoid) as numvotos, AVG(v.votos) AS media FROM `votar` v GROUP BY v.votadoid HAVING AVG(v.votos) >=8 AND votadocateg=chistestexto)T1
3) Ahora busco los votadoid cuyo total es el máximo y cuya media iguala o supera la establecida. SELECT v2.votadoid, COUNT(v2.votadoid) AS numervotos, AVG(v2.votos) AS mediavotos FROM votar v2 GROUP BY v2.votadoid HAVING COUNT(v2.votadoid) = 2) 3) AND AVG(v2.votos) >=8 AND v2.votadocateg=chistestexto


En cuanto a lo segundo, te diré que existen libros y páginas de SQL algo más avanzado, pero que yo al menos he aprendido mucho de las consultas que Quimfv, Seyko, gnzsoloyo, etc. ponen en el foro MySQL o en este, y también de muchas otras de flaviovitch, iislas, Tariboo007 y otros más en este y otros foros de bases de datos, y también de una página ya vieja que trata sobre MySQL, la base que uso (http://www.mysql-hispano.org/page.php?id=31&pag=1 y esta otra dirección http://www.aulaclic.es/sql/index.htm). De hecho, esta consulta se basa en otra con la que "provoqué" a Quimfv en el foro MySQL para que hiciera con MySQL un MAX(COUNT(campo)), algo que en nuestra base no funciona. Él lo hizo con subconsultas de este tipo. Y también me ayudaron las palabras de gnzsoloyo que habló una vez de algo así como "formar una cebolla" para hacer estas consultas, e ir probando por capas de dentro a fuera (como te he puesto en el ejemplo explicado), teniendo en mente (y esto ya es cosa mía) que cuando agrupo sólo puedo traerme el campo por el que agrupo y el resultado de la agrupación . Por lo demás, no puedo decirte una página concreta para buscar las consultas y tampoco donde te las enseñen a hacer, y como tú me gustaría conocerla, pues yo actúo, a falta de formación y conocimientos técnicos, por intuición y prueba-error (de hecho no sé si la que te he propuesto es la mejor posible), pero sé que cuando me encuentro con un problema de este tipo, la búsqueda en google no siempre debe empezar por el nombre de mi base (MySQL, o la que sea), sino por SQL, que es el lenguaje. No obstante, si encuentro alguna interesante te la postearé aquí.
Si recibes alguna recomendación más concreta de alguien del foro, yo también la leeré agradecido.

Última edición por jurena; 13/07/2008 a las 04:15