【问题标题】:SQL Server - logical question - Get rank from IDsSQL Server - 逻辑问题 - 从 ID 中获取排名
【发布时间】:2021-04-15 09:51:40
【问题描述】:

我正在尝试使用 Redshift POSTGRES 8 编写查询来解决逻辑问题。

输入列是一堆 ID 和订单 ID,所需的输出基本上是 ID 的等级,如您在屏幕截图中所见。 (很抱歉,我还不允许将图片嵌入到我的 StackOverflow 帖子中)

如果你能帮我用 SQL 回答这个问题,那就太好了!谢谢

数据

order id id size desired output
1 abcd 2 1
1 abcd 2 1
1 efgh 5 2
1 efgh 5 2
1 efgh 5 2
1 efgh 5 2
2 aa 2 1
2 aa 2 1
2 bb 2 2
2 bb 2 2

【问题讨论】:

  • 请不要包含指向数据图像的链接。使用编辑器的降价语言将数据包含为格式化文本。
  • sql server 还是 mysql?
  • MySQL8+ 具有 MySQL 5.x 中不存在的功能,并且它们都与 SQL Server(Microsoft 的产品)不同 - 请您指定您正在使用的 DBMS,并指定哪个版本?

标签: sql amazon-redshift


【解决方案1】:
SELECT
  *,
  DENSE_RANK() OVER (PARTITION BY order_item_id ORDER BY id)   AS desired_result
FROM
  your_table

DENSE_RANK() 根据ORDER BY 创建从1 开始的序列。

任何具有相同ID 的行都将获得相同的值,而RANK() 将跳过值,而DENSE_RANK() 则不会。

PARTITION BY 允许为每个不同的order_item_id 创建新序列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2010-11-28
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多