Sql 解决显示前五大畅销产品的查询

Sql 解决显示前五大畅销产品的查询,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,我有一张客户发票表,上面有商品名称和数量列。我想以降序显示特定项目和项目销售数量的前5个项目,即如果项目A的数量为5,项目B的数量为3,则项目A应位于顶部,项目B将位于第2个编号 | ITEMCODE | QUANTITY | ------------------------ | kb434 | 1 | | A4tech123 | 4 | | HDD40GB | 4 | | Cell12 | 4 | | Icd12

我有一张客户发票表,上面有商品名称和数量列。我想以降序显示特定项目和项目销售数量的前5个项目,即如果项目A的数量为5,项目B的数量为3,则项目A应位于顶部,项目B将位于第2个编号

|  ITEMCODE | QUANTITY |
------------------------
|     kb434 |        1 |
| A4tech123 |        4 |
|   HDD40GB |        4 |
|    Cell12 |        4 |
|    Icd123 |        2 |
| A4tech123 |        6 |
在上面的图表中,我希望第一个是4TECH123,第二个是HDD40GB,第三个是Cell12,依此类推

试试这个:

select top 5 Item_code, sum(Quantity)
from customer_invoice
group by Item_code
Order by sum(Quantity) desc
SELECT * FROM
(
  SELECT ITEMCODE, SUM(QUANTITY) "TotalQty"
    FROM MyTable
GROUP BY ITEMCODE
ORDER BY SUM(QUANTITY) DESC
       , ITEMCODE ASC
) A
WHERE rownum <= 5;
在这里,您需要使用子查询,因为如果不使用子查询,它将不会对所有ITEMCODE进行分组,因为我们正在使用WHERE rownum尝试以下方法:

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

这里您需要使用子查询,因为如果不使用子查询,它将不会对所有ITEMCODE进行分组,因为我们使用的是WHERE rownum,如果您将postgres用作DB,则使用以下查询:

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


我没有检查第二个,因为我正在使用Postgres DB,所以在使用确认查询之前,如果您正在使用Postgres as DB,请使用以下查询:

CREATE TABLE invoice
    (ITEMCODE varchar(9), QUANTITY int)
;

INSERT INTO invoice
VALUES
    ('kb434', 1),
    ('A4tech123', 4),
    ('HDD40GB', 4),
    ('Cell12', 4),
    ('Icd123', 2),`
    ('A4tech123', 6)
;


SELECT ITEMCODE,
       SUM(QUANTITY) as total_quantity,
       ROW_NUMBER() OVER (order by sum(QUANTITY) desc) as rank_n
FROM invoice
GROUP BY ITEMCODE

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

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

CREATE TABLE invoice
    (ITEMCODE varchar(9), QUANTITY int)
;

INSERT INTO invoice
VALUES
    ('kb434', 1),
    ('A4tech123', 4),
    ('HDD40GB', 4),
    ('Cell12', 4),
    ('Icd123', 2),`
    ('A4tech123', 6)
;


SELECT ITEMCODE,
       SUM(QUANTITY) as total_quantity,
       ROW_NUMBER() OVER (order by sum(QUANTITY) desc) as rank_n
FROM invoice
GROUP BY ITEMCODE

列是item_code还是item_name?我想添加item_code的编号,即应添加数量编号和item_code…我明白了。您在介绍段落中写了“项目名称”是项目代码还是项目名称?我想添加项目代码的编号,即应添加数量和项目代码的编号…我明白了。你在介绍中写了“项目名称”paragraph@MuhammadUsman-您需要像我在回答查询中所做的那样使用group by检查out@MuhammadUsman-您需要使用group by,就像我在回答查询中所做的那样,检查“limit”语法是否也用于mySQL,iirc。但是OP使用的是oracle'limit'语法,mySQL也使用了,iirc。但OP正在使用oracle@MuhammadUsman-我不知道y小组的第一个正确答案是不被接受的…答案在排除错误后更新accepted@MuhammadUsman-我不知道y组的第一个正确答案是“不被接受”…在排除错误后更新答案“被接受”
select top 5 Item_code, Quantity from customer_invoice order by Quantity desc
CREATE TABLE invoice
    (ITEMCODE varchar(9), QUANTITY int)
;

INSERT INTO invoice
VALUES
    ('kb434', 1),
    ('A4tech123', 4),
    ('HDD40GB', 4),
    ('Cell12', 4),
    ('Icd123', 2),`
    ('A4tech123', 6)
;


SELECT ITEMCODE,
       SUM(QUANTITY) as total_quantity,
       ROW_NUMBER() OVER (order by sum(QUANTITY) desc) as rank_n
FROM invoice
GROUP BY ITEMCODE