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

10-08 00:51