none
Consulta articulo mas vendido RRS feed

  • Pregunta

  • Buenas, tengo la siguiente duda, tengo 3 tablas una que es...

    articulo (que contiene el cod_articulo entre otros atributos)

    venta (que contiene cod_factura, fecha_venta, entre otros atributos)

    y venta_articulo (que contiene cod_factura y cod_articulo)

    Necesito realizar la consulta de los articulos mas vendidos de la semana, intente hacer con subconsultas y logre hacer que tire los articulos vendidos dentro de un rango, pero no logre realizar los "MÁS vendidos". Alguien tiene alguna sugerencia?

    domingo, 1 de noviembre de 2015 5:05

Respuestas

  • Hola mathiiuy,

    Primero, debo suponer que olvidaste mencionar que la tabla [venta_articulo] tiene una columna que define la cantidad de venta por artículo, algo como [cantidad_venta], ¿verdad?.

    Segundo, es necesario que cuantifiques la expresión "los artículos mas vendidos de la semana", ¿a que te refieres?¿El top 5, 10, 15 más vendidos? ¿Los más vendidos sobre una cantidad base?

    Este primer ejemplo muestra el TOP 10 de los productos mas vendidos. La clausula TOP trabaja en conjunto con la clausula ORDER BY para limitar las filas según el orden, en este caso limito los 10 primeros registros en base a la cantidad vendida ordenada de manera descendente. La clausula WITH TIES sirve para retornar mas coincidencias en caso el valor TOP sea el mismo.

    DECLARE @FechaInicio date = '20151026';
    DECLARE @FechaFin date = '20151031';
    
    SELECT
            TOP (10) WITH TIES
            arti.cod_articulo,
            SUM(vear.cantidad_venta) [Total Venta]
    FROM
            venta vent
            INNER JOIN venta_articulo vear ON (vear.cod_factura = vent.cod_factura)
            INNER JOIN articulo arti ON (arti.cod_articulo = vear.cod_articulo)
    WHERE
            fecha_venta BETWEEN @FechaInicio AND @FechaFin
    GROUP BY
            arti.cod_articulo
    ORDER BY
            [Total Venta] DESC;

    Este segundo caso que te propongo muestra los productos más vendidos a razón de una cantidad base - para el ejemplo 10 unidades -, es decir, todos los productos vendidos por encima de las 10 unidades son los productos más vendidos y para lograr ello hago uso de la clausula HAVING que me permite hacer filtros sobre el grupo.

    DECLARE @FechaInicio date = '20151026';
    DECLARE @FechaFin date = '20151031';
    
    SELECT
            arti.cod_articulo,
            SUM(vear.cantidad_venta) [Total Venta]
    FROM
            venta vent
            INNER JOIN venta_articulo vear ON (vear.cod_factura = vent.cod_factura)
            INNER JOIN articulo arti ON (arti.cod_articulo = vear.cod_articulo)
    WHERE
            fecha_venta BETWEEN @FechaInicio AND @FechaFin
    GROUP BY
            arti.cod_articulo
    HAVING
            SUM(vear.cantidad_venta) > 10 /*Cambiar la cantidad por la que consideres oportuno*/
    ORDER BY
            [Total Venta] DESC;

    domingo, 1 de noviembre de 2015 18:03

Todas las respuestas

  • Hola mathiiuy,

    Primero, debo suponer que olvidaste mencionar que la tabla [venta_articulo] tiene una columna que define la cantidad de venta por artículo, algo como [cantidad_venta], ¿verdad?.

    Segundo, es necesario que cuantifiques la expresión "los artículos mas vendidos de la semana", ¿a que te refieres?¿El top 5, 10, 15 más vendidos? ¿Los más vendidos sobre una cantidad base?

    Este primer ejemplo muestra el TOP 10 de los productos mas vendidos. La clausula TOP trabaja en conjunto con la clausula ORDER BY para limitar las filas según el orden, en este caso limito los 10 primeros registros en base a la cantidad vendida ordenada de manera descendente. La clausula WITH TIES sirve para retornar mas coincidencias en caso el valor TOP sea el mismo.

    DECLARE @FechaInicio date = '20151026';
    DECLARE @FechaFin date = '20151031';
    
    SELECT
            TOP (10) WITH TIES
            arti.cod_articulo,
            SUM(vear.cantidad_venta) [Total Venta]
    FROM
            venta vent
            INNER JOIN venta_articulo vear ON (vear.cod_factura = vent.cod_factura)
            INNER JOIN articulo arti ON (arti.cod_articulo = vear.cod_articulo)
    WHERE
            fecha_venta BETWEEN @FechaInicio AND @FechaFin
    GROUP BY
            arti.cod_articulo
    ORDER BY
            [Total Venta] DESC;

    Este segundo caso que te propongo muestra los productos más vendidos a razón de una cantidad base - para el ejemplo 10 unidades -, es decir, todos los productos vendidos por encima de las 10 unidades son los productos más vendidos y para lograr ello hago uso de la clausula HAVING que me permite hacer filtros sobre el grupo.

    DECLARE @FechaInicio date = '20151026';
    DECLARE @FechaFin date = '20151031';
    
    SELECT
            arti.cod_articulo,
            SUM(vear.cantidad_venta) [Total Venta]
    FROM
            venta vent
            INNER JOIN venta_articulo vear ON (vear.cod_factura = vent.cod_factura)
            INNER JOIN articulo arti ON (arti.cod_articulo = vear.cod_articulo)
    WHERE
            fecha_venta BETWEEN @FechaInicio AND @FechaFin
    GROUP BY
            arti.cod_articulo
    HAVING
            SUM(vear.cantidad_venta) > 10 /*Cambiar la cantidad por la que consideres oportuno*/
    ORDER BY
            [Total Venta] DESC;

    domingo, 1 de noviembre de 2015 18:03
  • Tengo una duda para que utilizas la plabra (vear) = 

    vear.cantidad_venta

    gracias por la respuesta.

    lunes, 25 de enero de 2021 21:11
  • Hola J_AA:
    La palabra vear es un alias de la tabla venta_articulo

    INNER JOIN venta_articulo vear ON 

    A partir del momento de la inclusión del alias, para mencionar cualquiera de las columnas, se les refiere por su alias . nombreColumna

    Alias de tabla

    https://docs.microsoft.com/es-es/sql/ssms/visual-db-tools/create-table-aliases-visual-database-tools?view=sql-server-ver15

    martes, 26 de enero de 2021 4:53