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 - bewa

#1
Bases de Datos / Re: Consulta en Mysql
5 Abril 2012, 14:16 PM
Madre mía. ¿He dicho que parecía facilita? lo retiro xD

La he sacado y todavía como que no termino de asimilar del todo.

La solución es ésta:

SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX
FROM PRODUCTOS
WHERE CODPROD IN(SELECT CODPROD FROM PRODUCTOS
WHERE PVP IN (SELECT MAX(PVP) FROM PRODUCTOS
GROUP BY DESCRIPCION)
)
GROUP BY DESCRIPCION
;
#2
Bases de Datos / Re: Consulta en Mysql
5 Abril 2012, 13:37 PM
Ese el el problema, que coge los 4 primeros codprod y no los que tiene que coger. Pero las descripciones no las puedo cambiar porque está puesto así a mala leche digamos xD.

Un saludo Runex y gracias!!
#3
Bases de Datos / Re: Consulta en Mysql
5 Abril 2012, 13:08 PM
Nop, porque el precio máximo de un producto sólo es uno. Tengo que coger los productos de mayor precio por tipo (descripcion). Si lo hago así me sale:

#4
Vuelvo con mi particular batalla con mysql xD

Esta vez parece facilita y sólo hay que coger datos de una tabla pero no me sale.
La tabla es esta:


Hay que obtener los precios máximos por tipo de producto (descripción) con los siguientes datos: codprod, descripcion, preciomax

Yo he hecho esto:

SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX
FROM PRODUCTOS
GROUP BY DESCRIPCION
;

Y me da como resultado:



Los codprod no me coinciden. Me tendría que salir algo como:



#5
Al final lo he podido hacer con subconsultas. Lo dejo aquí solucionado:

SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE,
SUM(PRECIO*CTD) AS IMPORTEMAX
FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS
WHERE PEDIDOS.NUMPED=REMESAS.NUMPED
AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA
AND PROVEEDORES.CODPROV=PEDIDOS.CODPROV
GROUP BY NUMPED
HAVING IMPORTEMAX >= ALL(
    SELECT SUM(PRECIO*CTD)
    FROM PIEZAS, REMESAS
    WHERE PIEZAS.CODPIEZA=REMESAS.CODPIEZA
    GROUP BY NUMPED
                    )
;

#6
Está curioso lo del limit xD, no lo había usado nunca. Así funciona:

SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(CTD*PRECIO) AS IMPORTEMAX
FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS
WHERE PROVEEDORES.CODPROV=PEDIDOS.CODPROV
AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA
AND PEDIDOS.NUMPED=REMESAS.NUMPED
GROUP BY NUMPED
ORDER BY IMPORTEMAX DESC
LIMIT 1
;

Lo que pasa es que me va a decir que esto es trampa  :xD porque son ejercicios de subconsultas. Pero está muy bien pensado.

Muchas gracias!!!
#7
A ver si alguien me puede ayudar porque me estoy volviendo loco xD. Pongo primero las tablas:
Tabla proveedores:



Tabla pedidos:



Tabla piezas:



Tabla remesas:





Ejercicio: obtener el codigo pedido(NUMPED), fecha de pedido (FECHAP), codigo del proveedor(CODPROV), nombre del proveedor(NOMBRE) e importe de pedido de mayor valor.

Bien, el importe de pedido es un campo calculado. Es el sumatorio de las cantidades (campo CTD en la tabla remesas) pedidas, multiplicadas por el precio de coste de las piezas. Esto lo he podido hacer:

SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(CTD*PRECIO) AS IMPORTEMAX
FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS
WHERE PROVEEDORES.CODPROV=PEDIDOS.CODPROV
AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA
AND PEDIDOS.NUMPED=REMESAS.NUMPED
GROUP BY NUMPED

;

Y me da esta tabla:



Pero necesito que sólo me aparezca el importe de pedido de mayor valor. Es decir, esta linea:



He intentado hacer:


SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(CTD*PRECIO) AS IMPORTEMAX
FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS
WHERE PROVEEDORES.CODPROV=PEDIDOS.CODPROV
AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA
AND PEDIDOS.NUMPED=REMESAS.NUMPED
GROUP BY NUMPED
HAVING IMPORTEMAX=(SELECT MAX(IMPORTEMAX))
;

Pero nada, me da un error. Supongo que hay que indicarle en el select del having la tabla donde está IMPORTEMAX pero IMPORTEMAX es un campo calculado. Así que no está en ninguna tabla.

#8
Scripting / Problema con script en bash
1 Febrero 2012, 21:44 PM
Hola a todos.

Hemos empezado con linux y el profesor ha puesto este script para montar una partición de windows.

Código (bash) [Seleccionar]
#! /bin/bash
# utilidad para montar una particion de windows ntfs
#1- Punto de montaje
particionwin=/dev/sda2
media=/media
punto=/W7
puntomontaje=$media$punto
export particionwin puntomontaje
# echo $puntomontaje
if [ `id -u` = "0" ]; then
if ! [ -d $puntomontaje ];then
mkdir $puntomontaje;
fi
mount $particionwin $puntomontaje;
else
if ! [ -d $puntomontaje ]; then
sudo "mkdir $puntomontaje;mount $particionwin $puntomontaje"
else
sudo mount $particionwin $puntomontaje;
fi
fi


El script funciona, el problema es que no entiendo los if y el export.
Esto:
Código (bash) [Seleccionar]
if [ `id -u` = "0" ];
Esto:
Código (bash) [Seleccionar]
if ! [ -d $puntomontaje ]
Y esto:
Código (bash) [Seleccionar]
export particionwin puntomontaje

Me suena a chino.

Si hay algún manual en el que se expliquen estas cosas también lo agradecería mucho.

Un saludo.
#9
Java / Re: Ordenar array bidimensional
1 Febrero 2012, 20:29 PM
Es que es difícil entender el código de otro. Por lo menos para mí que estoy empezando xD.

Pero tampoco creo que sea muy necesarios estos ejercicios a parte de para coger manejo. Dile a tu profesor que empiece ya con las clases y la interfaz gráfica si ya teneis un buen manejo. Seguir aumentando la dificultad de estos ejercicios con bucles dentro de bucles me parece de locos y no se avanza.
#10
Java / Re: Ordenar array bidimensional
1 Febrero 2012, 02:02 AM
Código (java) [Seleccionar]


package elhackerordenararraybi;


public class ElhackerOrdenarArrayBi {


   public static void main(String[] args) {
       // TODO code application logic here
       
       int numeros[][]= new int [4][4];
       int columna=0;
       int var_fila=0;
       int var_fila2=0;
       int temp=0;
       numeros[0][0]=456;
       numeros[0][1]=24;
       numeros[0][2]=548;
       numeros[0][3]=290;
       
       numeros[1][0]=234;
       numeros[1][1]=861;
       numeros[1][2]=21;
       numeros[1][3]=468;
       
       numeros[2][0]=593;
       numeros[2][1]=245;
       numeros[2][2]=552;
       numeros[2][3]=691;
       
       numeros[3][0]=616;
       numeros[3][1]=154;
       numeros[3][2]=101;
       numeros[3][3]=384;

       //imprimimos array sin ordenar

       System.out.println("----ARRAY SIN ORDENAR----");
       while(var_fila <4)
       {
        while(columna<4)
            {
                 System.out.print("  "+numeros[columna][var_fila]+"  ");
                 columna++;
             }
                System.out.println();
                columna=0;
                var_fila++;
       }
       
       var_fila=0;
       columna=0;

       //ordenamos el array

       while(columna<4)
       {
           while(var_fila<3)
           
           {

              while(var_fila2<3)
              {
                  if(numeros[columna][var_fila]>numeros[columna][var_fila2+1]&& var_fila2>=var_fila)
                  {
                      temp=numeros[columna][var_fila];
                       numeros[columna][var_fila]=numeros[columna][var_fila2+1];
                       numeros[columna][var_fila2+1]=temp;

                  }
                  var_fila2++;
              }
              var_fila2=0;
              var_fila++;
           }
          var_fila2=0;
          var_fila=0;
          columna++;
       }
       columna=0;
       var_fila=0;
       
       //Imprimimos el array
       System.out.println("----IMPRIMIMOS EL ARRAY ORDENADO--------");
       while(var_fila <4){
        while(columna<4){
         System.out.print("  "+numeros[columna][var_fila]+"  ");
         columna++;
        }
        System.out.println();
        columna=0;
        var_fila++;
       }
   }
}

:rolleyes: :rolleyes: :rolleyes: :rolleyes: