Seleccione la parte superior y ordene de dos tablas

Estoy haciendo un mercado de comercio electrónico. Hay muchos vendedores que venden en este mercado. Para cada vendedor, me gustaría mostrar una lista de los más vendidos.

La base de datos está en SQL Server. Hay 2 tablas principales en este caso:

Tabla 1: Almacena los productos pedidos de cada pedido. Los campos incluyen ID de vendedor, ID de pedido, ID de producto y Cantidad.

Tabla 2: La tabla maestra de productos. Los campos incluyen ProductID, ...

¿Cómo puedo hacer una consulta para obtener los 10 mejores productos con más pedidos? Mi SQL a continuación no parece funcionar ...

SELECT TOP (10) SUM(d.Quantity) AS total, d.ProductID, p.Title
From OrderDetails d, Products p
WHERE d.SellerID = 'xxx' AND
d.ProductID = p.ProductID
GROUP by d.ProductID
ORDER BY total DESC

Cualquier ayuda es muy apreciada. ¡Gracias!

preguntado el 04 de julio de 12 a las 09:07

¿Obtiene un error o resultados incorrectos? -

el que menos nuestra marca, por favor, simplemente haz eso, ya que todos están tratando de ayudar con el cartel. -

3 Respuestas

select *, d.s
from products p
inner join 
(
   select top 10 productid, sum(quantity) as s
   From OrderDetails
   group by productid
   order by sum(quantity) desc 
) 
d on d.productid = p.productid

Ver este ejemplo de SQLFiddle

Respondido 04 Jul 12, 09:07

Esto es sólo una suposición. Si desea "la mayoría de los pedidos", prefiero contar los pedidos en lugar de sumar la cantidad.

SELECT TOP 10 
COUNT(d.OrderID) AS total, d.ProductID, p.Title
FROM OrderDetails d 
INNER JOIN Products p ON d.ProductID = p.ProductID
WHERE d.SellerID = 'xxx' 
GROUP by d.ProductID, p.Title
ORDER BY COUNT(d.OrderID) DESC

Qué más arreglé:

  • A GROUP BY le faltaba una columna. Debe nombrar cada columna que tiene en su cláusula SELECT pero no está en una función agregada.

  • En la cláusula ORDER BY, debe nombrarlo exactamente como lo hizo en la cláusula SELECT. Los alias no funcionan bien en SQL Server.

  • Usó la sintaxis INNER JOIN, que es menos propensa a errores y olvida especificar la unión en la cláusula WHERE.

Respondido 04 Jul 12, 09:07

Esto funciona para mí, aunque necesito hacer algunos ajustes. Se cambió para usar SUMA y agregar algunos otros campos. ¡Gracias! - JK

Esto no se debe al tipo de base de datos que usa, sino a la función agregada. Hay muchas preguntas y respuestas sobre este problema en stackoverflow. Por favor, búscalo.

Respondido 04 Jul 12, 09:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.