Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - John_Salchichon

#1
Nakp: porque en oracle no se porque razon, si utilizas la funcion AVG debes agrupar obligatoriamente... no me preguntes porque

KuraraGNU:

no entiendo mucho el INNER JOIN pero la verdad q si.. no se para q use el HAVING si con un AND creo se puede...

no entiendo mucho lo del inner join, ademas me tira un error.. pero siguiendo tu idea lo q hice fue:


SELECT c.ALCCIU, c.HABCIU, c.NOMCIU
        FROM CIUDADES C, PLANTAS P, SECTORES S, GENERADORES G
        WHERE C.NOMCIU = P.NOMCIU
        AND S.CODPLAN = G.CODPLAN
        AND S.NUMSEC = G.NUMSEC
        AND S.NIVELSEC = 3
        AND KWGEN >= (SELECT AVG(G.KWGEN)
                      FROM GENERADORES G
                      GROUP BY G.KWGEN);

ahora no me tira mas error pero nunca me devuelve nada tampoco, chequeare a ver si es por los datos de prueba xD
#2
TABLAS:

Ciudades(nomCiu, habCiu, alcCiu)
Plantas(codPlan, nomPlan, dirPlan, tipoPlan, nomCiu)
Sectores(numSec, codPlan, dscSec, nivelSec, cntPerSec)
Generadores(codGen, dscGen, kwGen, fchInst, cicGen, cicUtilizGen, numSec, codPlan)

CONSULTA:

Mostrar los datos de las ciudades que tienen plantas que tienen sectores de nivel 3 y que no tienen generadores con capacidad de generación mayor al promedio de generación de todos los generadores de todas las plantas de la empresa.

Lo que hice:

SELECT C.ALCCIU, C.HABCIU, C.NOMCIU
      FROM CIUDADES C, PLANTAS P, SECTORES S, GENERADORES G
      WHERE C.NOMCIU = P.NOMCIU
      AND S.CODPLAN = G.CODPLAN
      AND S.NUMSEC = G.NUMSEC
      AND S.NIVELSEC = 3
      GROUP BY  C.ALCCIU, C.HABCIU, C.NOMCIU
      HAVING G.KWGEN >= (SELECT AVG(G.KWGEN)
                          FROM GENERADORES G
                          GROUP BY G.KWGEN);



Error:

Error en la línea de comandos:8 Columna:13
Informe de error:
Error SQL: ORA-00979: no es una expresión GROUP BY
00979. 00000 -  "not a GROUP BY expression"
*Cause:   
*Action:


Alguna idea? es la ultima que me queda :(
#3
probe con agruparlo solo con codprov como decis pero el oracle me larga un error, cuando los pongo a todos no... sera que funciona asi oracle?
#4
listo ya lo solucione con el group by:

SELECT P.CODPROV, P.DIRPROV, P.NOMPROV, P.TELPROV, MIN(PGC.cant)
      FROM PROVEEDORES P, PROV_GEN_COMP PGC
      WHERE P.codprov = PGC.codprov
      GROUP BY P.CODPROV, P.DIRPROV, P.NOMPROV, P.TELPROV;


estaba tratando de hacer group by con P.* y me daba error, habia que escribir todos los campos, ese era el problema.. muchas gracias!
#5
Donde iria el group by? es que nunca lo use mucho aun, lo puse en la consulta y me tiro error
#6
es asi:

Para cada proveedor mostrar sus datos y la menor entrega hecha de componentes de cada uno de ellos.

y deberia retornar:

---------------------- ------------------------------ ------------------------------ ------------------------------ ----------------------
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         2                     
12                     Horacio Peralta                Mariano Uriarte 8754           2623145                        4                     
4                      Tanque Silva                   Jackson 5523                   24112365                       5                     
8                      Pato Sosa                      Yi esq. 18 de julio            2745232                        6                     
5                      Sebastian Viera                Cerro Largo 1524               2147823                        7           
#7
Bases de Datos / AYUDA CON UNA CONSULTITA SQL
13 Junio 2011, 04:42 AM
El tema es asi, para cada "proveedor" mostrar sus datos (todos) y la menor entrega hecha de componentes de cada uno de ellos.

Las tablas son:

Proveedores (codProv, nomProv, dirProv, telProv)
Prov-Gen-Comp (codProv, codGen, numSerComp, fecha, cant)

de donde la cantidad de componentes entregados es la columna "cant" de la tabla Prov-Gen-Comp

entonces lo que hice fue:

SELECT P.*, PGC.cant
     FROM PROVEEDORES P, PROV_GEN_COMP PGC
     WHERE P.codprov = PGC.codprov
     AND PGC.cant = (SELECT MIN (PGC.cant)
                     FROM PROV_GEN_COMP);

como no me dejo hacerle un MIN en la primer linea sin ponerle al final un group by, me decidi a hacer una subconsulta por probar y si me deja sin problemas, pero ahora el tema es que me lista TODOS los proveedores, por ejemplo lo que me esta  devolviendo la consulta asi como esta  es:
CODPROV                NOMPROV                        DIRPROV                        TELPROV                        CANT                  
---------------------- ------------------------------ ------------------------------ ------------------------------ ----------------------
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         2                      
12                     Horacio Peralta                Mariano Uriarte 8754           2623145                        4                      
4                      Tanque Silva                   Jackson 5523                   24112365                       5                      
8                      Pato Sosa                      Yi esq. 18 de julio            2745232                        6                      
5                      Sebastian Viera                Cerro Largo 1524               2147823                        7                      
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         8                      

6 filas seleccionadas


cuando solo deberia mostrar una sola vez Cuqui Lacalle con la menor entrega, o sea 3 junto con los demas... o sea tendrian q aparecer todos esos menos cuqui lacalle con 8 entregas.. no se si se entiende..

alguna idea de como solucionar esto o pista a ver en que le estoy errando?

Gracias!