2013-12-11 97 views
0

這是我的數據庫示例: ORDERDETAILS表與ProID涉及到產品 tabale我如何可以查詢這個SQL得到最暢銷的產品

| 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 | 

如何獲得最暢銷的產品信息:ProID,ProPiecture,ProName,ProPrice from 的商品桌子上的orderdetails桌子?

+2

查找更快暢銷的產品你說的'最好seller'是什麼意思?請以表格形式添加您的示例輸出 –

+0

對不起,這是最暢銷的產品 –

回答

3

您可以在ProID上的表格之間使用SQL連接,例如,

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

可以使用組由語法,以確保您得到不同行,如

group by p.ProID 

使用諸如sum,count和avg之類的聚合函數來找出select中的總數,例如,

select sum(od.OrderQuantity) as total 

使用爲了通過語法來說明上面的答案,例如

order by sum(od.OrderQuantity) desc 

使用限制顯示前n個結果,例如

limit 5 

希望能給你足夠的指針來自己制定SQL。

筆記,我給了這些表一個別名,以確保您不會在列名之間發生衝突。由於SQL計算數據集的方式,因此在訂單聲明中不能引用總計。我使用了內連接,但您可能想要查看左邊的&右連接。

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) 
-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 
相關問題