+-------+-----+-------+----------+-------+
| iniid | iID | price | quentity | proID |
+-------+-----+-------+----------+-------+
| 42 | 16 | 20 | 30 | 4001 |
| 43 | 16 | 20 | 30 | 4001 |
| 44 | 16 | 20 | 30 | 4002 |
| 45 | 16 | 20 | 30 | 4002 |
| 46 | 17 | 20 | 1 | 4001 |
| 47 | 17 | 20 | 1 | 4003 |
| 48 | 17 | 20 | 1 | 4005 |
| 49 | 17 | 20 | 1 | 4001 |
| 50 | 17 | 20 | 1 | 4009 |
| 51 | 17 | 20 | 1 | 4002 |
| 52 | 17 | 20 | 1 | 4001 |
| 53 | 17 | 20 | 1 | 4005 |
| 54 | 17 | 20 | 1 | 4008 |
| 55 | 17 | 20 | 1 | 4008|
| 56 | 17 | 20 | 1 | 4007 |
| 57 | 17 | 20 | 1 | 4000 |
| 58 | 18 | 20 | 2 | 4005 |
| 59 | 18 | 20 | 2 | 4002 |
| 60 | 18 | 20 | 2 | 4003 |
| 61 | 18 | 20 | 2 | 4003 |
| 62 | 18 | 20 | 2 | 4009 |
| 63 | 18 | 20 | 2 | 4003 |
| 64 | 18 | 20 | 2 | 4002 |
现在我想查找特定月份的前5个畅销产品。我也有发票注册表,因此我可以获取特定月份的
'iId'
。我的问题是如何为给定的iId.proID选择相同的前5个产品? different [通常不同] .top表示最大数量。所以我想要产品ID(proID)排名前5 [数量]。我尝试编写mysql查询,但失败了。select (top 5 quentity) from invoice where iID>15;
expected result
total quentity of 4001=63;
total quentity of 4002=65;
........and so on.........
so top 2 products are 4002 and 4001;
so i wanna get 4002,4001,.....[5th product]
最佳答案
MySQL使用LIMIT
而不是TOP
。只需订购quentity
字段DESC
,您将获得quentity
最高的前5条记录:
SELECT *
FROM Invoice
WHERE iID>15
ORDER BY quentity DESC
LIMIT 5
请注意,您获得第五名的可能是平局。如果需要考虑关系,则可以使用用户定义的变量。
完成编辑后,您要
SUM
quentity
字段,然后将结果排序为最高总数量。SELECT proId, SUM(quentity)
FROM Invoice
WHERE iID > 15
GROUP BY proId
ORDER BY 2 DESC
LIMIT 5