【问题标题】:How to include a Row_Number function at MySQL query如何在 MySQL 查询中包含 Row_Number 函数
【发布时间】:2021-11-05 10:37:34
【问题描述】:

我想生成一个 row_number 函数,就像我们从 SQL 服务器获得的那样,但直接通过 MySQL。

我有以下,但它不起作用。我不确定应该在哪里设置 row_number=0:

SET @rownum:=0;
select i.name, sum(quantity) Qtd, @rownum := @rownum + 1 AS rank
from orders o join order_items i on o.id = i.order_id
where i.product_id not in ("wpp001", "147426")
group by 1
order by 5 desc
limit 10

我有一张这样的桌子:

name | Qtd
A    | 2
A    | 3
B    | 1
C    | 6

预期的结果:

name | Qtd | rownum
C    | 6   | 1
A    | 5   | 2
B    | 1   | 3

编辑:更正了集合名称变量和所需的表+输出

【问题讨论】:

  • 请描述“它不起作用”是什么意思。它会给出错误的结果吗?如果是这样,它返回什么结果?它会返回错误吗?如果是这样,确切的错误是什么?

标签: mysql window-functions


【解决方案1】:

您将使用row_number()。鉴于您没有第五列,我假设您打算这样:

select i.name, sum(quantity) as Qtd,
       row_number() over (order by sum(quantity) desc) as rnk
from orders o join
     order_items i
     on o.id = i.order_id
where i.product_id not in ('wpp001', '147426')
group by 1
order by qtd desc
limit 10;

自 2018 年 4 月发布 8.0 版以来,MySQL 一直支持 row_number()

在旧版本中,您将使用子查询:

select x.*, (@rn := @rn + 1) as rnk
from (select i.name, sum(quantity) as Qtd
      from orders o join
           order_items i
           on o.id = i.order_id
      where i.product_id not in ('wpp001', '147426')
      group by 1
      order by qtd desc
     ) n cross join
     (select @rn := 0) params
limit 10;

【讨论】:

  • 很遗憾,我还没有运行 8.0 版本
【解决方案2】:

您必须为用户定义的变量设置相同的名称,

您在 SET 中使用了一个,在您的代码中使用了另一个

CREATE TABLE orders(id int)
INSERT INTO orders VALUES (1),(2)
CREATE tABLE order_items(name varchar(4),product_id int ,quantity int,orde
INSERT INTO order_items VALUES('A',1,1,1),('b',2,1,1),('A',1,1,2),('b',2,1,2)
SET @rownum:=0;
select i.name, sum(quantity) Qtd, @rownum := @rownum + 1 AS rank
from orders o join order_items i on o.id = i.order_id
where i.product_id not in ("wpp001", "147426")
group by 1
order by 3 desc
limit 10
姓名 | Qtd |秩 :--- | --: | ---: 乙 | 2 | 2 一个 | 2 | 1

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 2011-02-11
    • 2017-03-27
    • 2017-08-15
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多