Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/02/2015, 06:00
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Error en consulta MySQL

Si te vas a poner a hacer consultas a la base, te recomiendo enfáticamente estudiar un poco de BBDD y SQL hasta que deje de soanrte a "chino", como dices. No es posible trabajar en algo que no se entiende.
Esa es una observación que se cumple en todo lo referido a informática.

Hay un par de detalles:
1) DISTINCT devuelve registros diferentes, considerando todos los campos que indican en el select, y no sólo el primer campo, por lo que en realidad te devovlería un registro por cada acuario, alias y "tipo" (que no sé que es), como conjunto.
¿Eso lo entiendes?
Puede devolverte el mismo acuario N veces según la cantidad de alias encontrados relacionados al mismo acu_no, y cada uno de esos pares de datos N veces, una por cada "tipo" encontrado.
Con que un registro tenga un valor distinto en el mismo campo entre dos registros, devolverá ambos.
¿Queda claro?

2) AVG() es la media aritmética o promedio. Sólo aplica a campos numéricos ,por lo que el resultado dependerá de lo que se campo tenga.
Por otro lado, la consulta como la pusiste no funcionará con esa funcion en la subconsulta, porque sólo devolvería la que sea igual al promedio de todos... y no será la que mas tenga.

Ahora bien, voy a suponer que el campo "especie" contiene o un ID o bien el nombre de una especie determinada. Digo suponer porque en realidad no lo estás diciendo claramente, lo infiero por la consulta.
También voy a suponer que "alias" es alguna denominación única para cada acuario.
Y voy a suponer además que la consulta la creas programáticamente, desde una aplicación, porque de lo contrario no puedes indicar el "X".

Código MySQL:
Ver original
  1. SELECT acu_no, alias, tipo, COUNT(DISTINCT F.especie) especies
  2. FROM Acuarios A INNER JOIN Fauna F ON A.acu_no = F.acu_no
  3. WHERE F.especie
  4. GROUP BY acu_no, alias, tipo
  5. ORDER BY especies DESC

Suponiendo que X fuese iguala 12, esto puede funcionar si lo ejecutas en una consola de MySQL:

Código MySQL:
Ver original
  1. SET @x = 12;
  2. SELECT acu_no, alias, tipo, COUNT(DISTINCT F.especie) especies
  3. FROM Acuarios A INNER JOIN Fauna F ON A.acu_no = F.acu_no
  4. WHERE F.especie
  5. ORDER BY especies DESC
Claro, siemrpe que uses MySQL 5.4 o superior...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)