解决QUERY以展示TOP 5畅销产品

时间:2012-11-28 07:39:10

标签: sql oracle sqlplus

我有一个Customer_Invoice表,其中包含item_nameQuantity列。我想展示特定项目的前5个项目&物品数量按降序销售i-e如果物品A的数量已售出5且物品B的数量已售出3则物品A应位于顶部,而物品B将位于第二个号码。

|  ITEMCODE | QUANTITY |
------------------------
|     kb434 |        1 |
| A4tech123 |        4 |
|   HDD40GB |        4 |
|    Cell12 |        4 |
|    Icd123 |        2 |
| A4tech123 |        6 |

在上图中,我想要{1}}在第1号A4tech123上第2号,HDD40GB第3号,依此类推。

6 个答案:

答案 0 :(得分:8)

select top 5 Item_code, sum(Quantity)
from customer_invoice
group by Item_code
Order by sum(Quantity) desc

答案 1 :(得分:4)

select top 5 item_name , sum(Quantity) as Quantity from Customer_Invoice 
group by item_name 
ORDER BY sum(Quantity) DESC

答案 2 :(得分:0)

试试这个:

SELECT * FROM
(
  SELECT ITEMCODE, SUM(QUANTITY) "TotalQty"
    FROM MyTable
GROUP BY ITEMCODE
ORDER BY SUM(QUANTITY) DESC
       , ITEMCODE ASC
) A
WHERE rownum <= 5;

在这里,您需要使用子查询,因为不使用子查询,它不会对所有ITEMCODE like this进行分组(因为我们使用的是WHERE rownum <=5)。所以你需要添加子查询。

See this SQLFiddle

答案 3 :(得分:0)

如果您使用postgres作为数据库,请使用以下查询:

select Item_code, Quantity from customer_invoice order by Quantity desc limit 5

OR

如果您使用任何其他数据库,请使用此查询:

select top 5 Item_code, Quantity from customer_invoice order by Quantity desc

我没有检查第二个,因为我正在使用Postgres DB,所以在使用确认查询之前

答案 4 :(得分:0)

Collections.unmodifiableSet(new HashSet<String>(fruits))

http://sqlfiddle.com/#!18/da13e/6

答案 5 :(得分:-3)

SELECT TOP 5 * FROM Customer_Invoice ORDER BY QUANTITY