Autor Tema: procedimiento con variable y visualizacion SQL select max cláusula where  (Leído 2324 veces)

saroan

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Hola

Estoy realizando un ciclo formativo de grado superior de , desarrollo de aplicaciones web y me gustaría recibir ayudar sólo para saber si entiendo bien las cosas o no , ya que yo SIEMPRE pondré el enunciado y el código que yo entiendo debe ir .

Construya un procedimiento que seleccione el artículo de mayor
precio que esté almacenado en la tabla, almacene su valor en
una variable y luego visualícelo. (INTO sólo visualiza un
registro).


Código: [Seleccionar]
create table if not exists temporal
(
codigo varchar(5) primary key,
nombre varchar(20),
precio int(11)
);

delimiter $$
create procedure sele_articulo(nombre varchar(20))
begin
select nombre as art_may from articulos where precio >=80;
SELECT @variable:= nombre FROM  articulos WHERE precio=80;

end $$
delimiter ;

call sele_articulo(80);
el motivo de usar una tabla temporal , por sí alguien duda lo hago , por que en la teoría se nos indica que para hacer obtener un resultado de más de un registro es necesario hacerlo así , gracias .
« Última modificación: 14 de Mayo 2016, 21:41 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, mírate este hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 con indicaciones importantes...

El enunciado dice: Construya un procedimiento que seleccione el artículo de mayor precio que esté almacenado en la tabla

Caben dos posibilidades: hay varios artículos que tienen el mayor precio ó sólo hay un artículo que tiene el mayor precio. El enunciado dice "el artículo" y por ello parece dar a entender que sólo hay un artículo de mayor precio.

En ese caso la consulta a realizar podría ser similar a esta:

SELECT MAX(precio) AS PrecioMasAlto FROM articulos;

Una vez tengas el precio mayor puedes extraer el resto de datos que te resulten de interés usando un select where (buscando los artículos que tengan ese precio máximo puedes extraerlos todos si lo deseas, o usando limit 1 puedes extraer solo uno)

Salu2

saroan

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
En los datos que dispongo , efectivamente hay sólo uno que es el mayor , por eso indico la función mayor o igual a 80 , lo que más me confunde es lo de almacenar la variable y visualizarla , googleando he encontrado algo y lo he aplicado lo entendido al código expresado , por tanto , no sé si lo entiendo bien o no , gracias .

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas hay cosas que no entiendo

Una base de datos es para almacenar información que va cambiando en el tiempo. Supón que tienes ahora que tus datos son 20, 50, 15, 80, 55, 25. El más grande es 80 pero como la base de datos va cambiando dentro de unos días quizás tengas 20, 50, 15, 110, 85, 55, 95, 18, 44. Ahora el dato más grande ya no es 80. Entonces tu procedimiento no funcionaría. Las consultas deben funcionar sean cuales sean los datos en la base de datos, por eso te indicaba que debías usar MAX.

Tampoco entiendo por qué llamas al procedimiento como call sele_articulo(80);

create procedure sele_articulo(nombre varchar(20)) indica que le pasarás al procedimiento el nombre del artículo ¿Es 80 el nombre del artículo?


Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".