Sql 解决显示前五大畅销产品的查询
我有一张客户发票表,上面有商品名称和数量列。我想以降序显示特定项目和项目销售数量的前5个项目,即如果项目A的数量为5,项目B的数量为3,则项目A应位于顶部,项目B将位于第2个编号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
| 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