如何查询此sql以获得最畅销的产品

时间:2013-12-11 04:39:08

标签: mysql sql

这是我的数据库示例: 带有ProID的 orderdetails 表与产品标签相关

| ProID | OrderID | OrderQuantity | OrderPrice |
|  93   |    17   |       1       |     150    |
|  16   |    18   |       1       |     100    |
|  93   |    19   |       3       |     450    |
|  93   |    17   |       1       |     150    |

产品

| ProID | ProPicture | ProName | ProPrice |
|  93   | ./a.jpg    |  Iphone |    150   |
|  16   | ./b.jpg    |  Nokia  |    100   |

如何获取最畅销的产品信息:基于 orderdetails 表的产品表中的ProID,ProPiecture,ProName,ProPrice?

3 个答案:

答案 0 :(得分:3)

您可以在ProID上的表之间使用SQL连接,例如

from products as p
inner join orderdetails as od
   on p.ProID = od.ProID

您可以使用 group by 语法来确保获得不同的行,例如

group by p.ProID

使用sum,count和avg等聚合函数来查找select中的总数,例如

select sum(od.OrderQuantity) as total

使用 order by 语法显示最佳答案,例如

order by sum(od.OrderQuantity) desc

使用 limit 显示前n个结果,例如

limit 5

希望这能为你提供足够的指针来自己制定SQL。

notes ,我给表提供了一个别名,以确保您不会在列名之间产生冲突。由于SQL计算数据集的方式,您无法在订单声明中引用 total 。我使用了内连接,但你可能想看看左边和右边的连接。正确加入。

答案 1 :(得分:0)

您可以尝试以下查询 -

select * from products where ProID =
(select ProID 
  from 
    (select ProID , sum(OrderQuantity) as total_order,
        max(sum(OrderQuantity)) over() as maxSm   from orderdetails
        group by ProID
    )
where total_order = maxSm)

答案 2 :(得分:-1)

经过测试的ms sql查询,可以从上表中找到更快的销售产品

SELECT TOP(2) PRO.PRONAME, SUM(OD.ORDERQUANTITY) SALEQTY 
FROM PRODUCTS AS PRO INNER JOIN DBO.ORDERDETAILS AS OD 
  ON PRO.PROID = OD.PROID GROUP BY PRO.PRONAME