Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: S4ms3pi0l__ en 6 Abril 2019, 04:42 AM

Título: Clientes que hayan realizado más de 5 órdenes por año [DB Northwind]
Publicado por: S4ms3pi0l__ en 6 Abril 2019, 04:42 AM
Tengo el siguiente problema: Seleccionar a todos los clientes que hayan realizado más de 5 órdenes por año. Presentar el detalle de las cantidad por año. Ordenar por año.

Esto es lo que yo hice y que no sé si está correcto:

Código (sql) [Seleccionar]

ALTER PROCEDURE SP_TopClientes
AS
CREATE TABLE #HistorialCantidad(
--IdHistorial int primary key identity(0,1),
Nombre varchar(100),
Año int,
Cantidad int
)
CREATE TABLE #Año(
Id int primary key identity(0,1),
Año int
)
INSERT INTO #Año
SELECT DISTINCT YEAR(OrderDate) FROM Orders
DECLARE @Contador int
SET @Contador = 0
WHILE(@Contador < (SELECT COUNT(*) FROM #Año))
BEGIN
INSERT INTO #HistorialCantidad
SELECT DISTINCT TOP 5
c.CompanyName as [Nombre Compañía],
YEAR(o.OrderDate) as Año,
COUNT(*) AS Cantidad
FROM [Order Details] od
INNER JOIN Orders o ON o.OrderID = od.OrderID
INNER JOIN Customers c ON c.CustomerID = o.CustomerID
WHERE YEAR(o.OrderDate) = (SELECT Año from #Año WHERE Id = @Contador)
GROUP BY c.CompanyName, YEAR(o.OrderDate)
ORDER BY Cantidad DESC

SET @Contador = @Contador+1
END
SELECT * FROM #HistorialCantidad ORDER BY Año, Cantidad
DROP TABLE #HistorialCantidad
DROP TABLE #Año


Espero puedan ayudarme.
Título: Re: Clientes que hayan realizado más de 5 órdenes por año [DB Northwind]
Publicado por: EdePC en 7 Abril 2019, 03:38 AM
Saludos,

- Yo lo estoy entendiendo así:

-- Seleccionar a todos los clientes que hayan realizado más de 5 órdenes por año.
-- Presentar el detalle de las cantidad por año. Ordenar por año

Código (sql) [Seleccionar]
SELECT
  CustomerID,
  YEAR(OrderDate) AS Año,
  COUNT(OrderID)  AS Cantidad
FROM Orders
GROUP BY YEAR(OrderDate), CustomerID
HAVING COUNT(OrderID) > 5
ORDER BY Año


+------------+------+----------+
| CustomerID | Año  | Cantidad |
+------------+------+----------+
| ERNSH      | 1996 |        6 |
| QUICK      | 1996 |        6 |
| RATTC      | 1996 |        6 |
| AROUT      | 1997 |        7 |
| BERGS      | 1997 |       10 |
| BLONP      | 1997 |        7 |
| BONAP      | 1997 |        8 |
| BSBEV      | 1997 |        6 |
| ERNSH      | 1997 |       15 |
| FOLKO      | 1997 |        7 |
| FRANK      | 1997 |        8 |
| GOURL      | 1997 |        7 |
| GREAL      | 1997 |        6 |
| HILAA      | 1997 |       10 |
| HUNGO      | 1997 |       10 |
| KOENE      | 1997 |        8 |
| LAMAI      | 1997 |        8 |
| LEHMS      | 1997 |        8 |
| MEREP      | 1997 |       10 |
| OTTIK      | 1997 |        6 |
| PICCO      | 1997 |        6 |
| QUEEN      | 1997 |        7 |
| QUICK      | 1997 |       14 |
| RATTC      | 1997 |        6 |
| REGGC      | 1997 |        6 |
| SAVEA      | 1997 |       17 |
| VAFFE      | 1997 |        6 |
| WARTH      | 1997 |       10 |
| WHITC      | 1997 |        8 |
| BONAP      | 1998 |        6 |
| BOTTM      | 1998 |        8 |
| ERNSH      | 1998 |        9 |
| FOLKO      | 1998 |        9 |
| GODOS      | 1998 |        7 |
| HANAR      | 1998 |        7 |
| HILAA      | 1998 |        6 |
| LINOD      | 1998 |        7 |
| QUICK      | 1998 |        8 |
| RATTC      | 1998 |        6 |
| SAVEA      | 1998 |       11 |
| SUPRD      | 1998 |        6 |
+------------+------+----------+
Título: Re: Clientes que hayan realizado más de 5 órdenes por año [DB Northwind]
Publicado por: S4ms3pi0l__ en 7 Abril 2019, 22:41 PM
Cita de: EdePC en  7 Abril 2019, 03:38 AM
Saludos,

- Yo lo estoy entendiendo así:

-- Seleccionar a todos los clientes que hayan realizado más de 5 órdenes por año.
-- Presentar el detalle de las cantidad por año. Ordenar por año

Código (sql) [Seleccionar]
SELECT
  CustomerID,
  YEAR(OrderDate) AS Año,
  COUNT(OrderID)  AS Cantidad
FROM Orders
GROUP BY YEAR(OrderDate), CustomerID
HAVING COUNT(OrderID) > 5
ORDER BY Año


+------------+------+----------+
| CustomerID | Año  | Cantidad |
+------------+------+----------+
| ERNSH      | 1996 |        6 |
| QUICK      | 1996 |        6 |
| RATTC      | 1996 |        6 |
| AROUT      | 1997 |        7 |
| BERGS      | 1997 |       10 |
| BLONP      | 1997 |        7 |
| BONAP      | 1997 |        8 |
| BSBEV      | 1997 |        6 |
| ERNSH      | 1997 |       15 |
| FOLKO      | 1997 |        7 |
| FRANK      | 1997 |        8 |
| GOURL      | 1997 |        7 |
| GREAL      | 1997 |        6 |
| HILAA      | 1997 |       10 |
| HUNGO      | 1997 |       10 |
| KOENE      | 1997 |        8 |
| LAMAI      | 1997 |        8 |
| LEHMS      | 1997 |        8 |
| MEREP      | 1997 |       10 |
| OTTIK      | 1997 |        6 |
| PICCO      | 1997 |        6 |
| QUEEN      | 1997 |        7 |
| QUICK      | 1997 |       14 |
| RATTC      | 1997 |        6 |
| REGGC      | 1997 |        6 |
| SAVEA      | 1997 |       17 |
| VAFFE      | 1997 |        6 |
| WARTH      | 1997 |       10 |
| WHITC      | 1997 |        8 |
| BONAP      | 1998 |        6 |
| BOTTM      | 1998 |        8 |
| ERNSH      | 1998 |        9 |
| FOLKO      | 1998 |        9 |
| GODOS      | 1998 |        7 |
| HANAR      | 1998 |        7 |
| HILAA      | 1998 |        6 |
| LINOD      | 1998 |        7 |
| QUICK      | 1998 |        8 |
| RATTC      | 1998 |        6 |
| SAVEA      | 1998 |       11 |
| SUPRD      | 1998 |        6 |
+------------+------+----------+


Sí, está perfecto. Al final, creo que, lo terminaste simplificando. Muchas gracias por tu ayuda ;D