Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ayuda con esta consulta

Estas en el tema de Ayuda con esta consulta en el foro de SQL Server en Foros del Web. Mostrar el nombre y el precio del articulo mas costoso de cada categoria. Articulo: idart, nomart, precio, idcat Categoria: idcat, nomcat...
  #1 (permalink)  
Antiguo 13/03/2011, 19:45
 
Fecha de Ingreso: marzo-2011
Ubicación: Mocoa
Mensajes: 6
Antigüedad: 13 años, 8 meses
Puntos: 0
Ayuda con esta consulta

Mostrar el nombre y el precio del articulo mas costoso de cada categoria.

Articulo: idart, nomart, precio, idcat
Categoria: idcat, nomcat
  #2 (permalink)  
Antiguo 14/03/2011, 02:16
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: Ayuda con esta consulta

Código SQL:
Ver original
  1. SELECT c.nomcat, MAX(a.precio)
  2. FROM categoria c
  3. INNER JOIN articulo a ON
  4. c.idcat = a.idcat
  5. GROUP BY c.nomcat
  #3 (permalink)  
Antiguo 14/03/2011, 08:28
 
Fecha de Ingreso: marzo-2011
Ubicación: Mocoa
Mensajes: 6
Antigüedad: 13 años, 8 meses
Puntos: 0
No funciona

La consulta arroja el nombre de la categoria junto al valor del articulo mas costoso, pero lo que necesito es el nombre del articulo y el valor del articulo mas costoso por cada categoria.
  #4 (permalink)  
Antiguo 14/03/2011, 09:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Ayuda con esta consulta

Esto me suena a tarea de escuela. Compañero ingluise, en tu post no mencionas qué tipo de problema tienes con la consulta, simplemente pones un enunciado tipo examen y tal pareciera que esperas que te resolvamos el problema. Ojo con eso, el foro es para ayudar, no para hacer el trabajo de otros.

¿Qué haz intentado hacer? Supongo que estarás trabajando en alguna sentencia, sería de mucha utilidad que nos pusieras algo del código que llevas hecho para ayudarte a afinar los detalles.

La consulta no es muy difícil, con algunos conocimientos básicos sobre conceptos de agrupación y JOINS debería de quedar.

si haces esto:

Código SQL:
Ver original
  1. SELECT idcat, MAX(precio)
  2. FROM articulo
  3. GROUP BY idcat

de debe dar el EL PRECIO del artículo más caro POR CADA CATEGORÍA. Utiliza este resultado para filtrar tu tabla original mediante un INNER JOIN y obtendrás el resultado esperado. Si tienes dudas, busca en este mismo foro cualquier post en donde se trate el tema de obtención de máximos, te aseguro que más de alguno te debe servir.

Saludos
Leo.
  #5 (permalink)  
Antiguo 14/03/2011, 10:12
 
Fecha de Ingreso: marzo-2011
Ubicación: Mocoa
Mensajes: 6
Antigüedad: 13 años, 8 meses
Puntos: 0
Codigo SQL

No se por qué, en todos los foros uno pregunta algo, y siempre creen que uno espera le solucionen todo, si lo pregunto es porque he intentado resolverlo con anticipacion. La respuesta que me dieron inicialmente hace lo mismo que lo que ya habia hecho en el siguiente codigo SQL:

use SUPERMERCADO
select nomcat as "Categoría", MAX(precio) as "Valor"
from ARTICULO, CATEGORIA
where ARTICULO.idcat=CATEGORIA.idcat
group by nomcat

pero no es lo que necesito. Estoy trabajando en SQL Server 2008 Express y en lo que realmente necesito que me colaboren es en mostrar como resultado de la consulta el nombre de la categoria, el nombre del articulo y el precio del mismo que correspondan al mas elevado de cada categoria. Es decir, carnicos-salchicas zenu-8900, lacteos-yogurth alpina-2700, ...
  #6 (permalink)  
Antiguo 14/03/2011, 11:24
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: Ayuda con esta consulta

Código SQL:
Ver original
  1. SELECT c.nomcat, a.nomart, MAX(a.precio)
  2. FROM categoria c
  3. INNER JOIN articulo a ON c.idcat = a.idcat
  4. GROUP BY c.nomcat, a.nomart
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 16/03/2011, 13:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Codigo SQL

Cita:
Iniciado por ingluise Ver Mensaje
No se por qué, en todos los foros uno pregunta algo, y siempre creen que uno espera le solucionen todo, si lo pregunto es porque he intentado resolverlo con anticipacion. La respuesta que me dieron inicialmente hace lo mismo que lo que ya habia hecho en el siguiente codigo SQL:
Hola de nuevo ingluise:

Lo que pones en tu último post, explicando la salida y poniendo algo de código ES MUY DIFERENTE a poner simplemente:

Cita:
Mostrar el nombre y el precio del articulo mas costoso de cada categoria.

Articulo: idart, nomart, precio, idcat
Categoria: idcat, nomcat
Es decir, en el primer post ni siguiera tienes la amabilidad de pedir ayuda, simplemente pones un texto y tal pareciera que quisieras que nosotros adivináramos todo. En mi post anterior te pedía que revisaras en el foro alguna otra respuesta sinceramente ¿lo hiciste?. La verdad es que lo dudo, pues de haberlo hecho estoy seguro de que encontrarías alguna respuesta para aplicar a tu caso.

Prueba con esto:


Código SQL:
Ver original
  1. DECLARE @Categoria TABLE (idcat INT, nomcat VARCHAR(20))
  2. INSERT INTO @Categoria VALUES (1, 'lacteos')
  3. INSERT INTO @Categoria VALUES (2, 'carnicos')
  4.  
  5. DECLARE @articulo TABLE (idart INT, idcat INT, nomart VARCHAR(20), precio INT)
  6. INSERT INTO @articulo VALUES (1, 1, 'crema', 10)
  7. INSERT INTO @articulo VALUES (2, 1, 'leche', 50)
  8. INSERT INTO @articulo VALUES (3, 1, 'queso', 20)
  9. INSERT INTO @articulo VALUES (4, 2, 'jamón', 100)
  10. INSERT INTO @articulo VALUES (5, 2, 'salchicha', 70)
  11.  
  12. SELECT c.nomcat, a.nomart, a.precio FROM @articulo a INNER JOIN @categoria c ON a.idcat = c.idcat INNER JOIN
  13. (SELECT idcat, MAX(precio) max_precio FROM @articulo GROUP BY idcat) T1 ON a.idcat = T1.idcat AND a.precio = T1.max_precio

Si observas la consulta que aparece como T1 ES LA MISMA QUE TE PUSE EN LA PRIMERA DE MIS RESPUESTAS ahí te mencionaba que utilizaras esta consulta para hacer un INNER JOIN con tus tablas original, ¿era muy difícil tratar de hacerlo?

compañero, no esperes que en los foros se te entreguen las respuesta sólo para copiar y ejecutar. en la mayoría de las ocasiones tendrás que hacer algunas adecuaciones, ojo con eso.

Espero que los códigos te sean de utilidad

Leo.
  #8 (permalink)  
Antiguo 30/03/2011, 13:50
 
Fecha de Ingreso: marzo-2011
Ubicación: Mocoa
Mensajes: 6
Antigüedad: 13 años, 8 meses
Puntos: 0
Agradecimientos y excusas

Estimado Leo, quiero disculparme contigo por haberte causado molestias, sin embargo te agradezco que me hayas ayudado con la consulta, creeme, no soy de los que les gusta que les hagan las cosas. Hasta pronto.

Etiquetas: articulos, categorias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.