【问题标题】:How does RANK() work on multiple columns in Sql?RANK() 如何在 Sql 中的多个列上工作?
【发布时间】:2020-01-24 13:58:28
【问题描述】:

您能解释一下这段 SQL 是如何工作的吗? QUALIFY 选择第一个值,很清楚

QUALIFY RANK(column1 ASC, column2 ASC, column3 , column4)=1

Rank() 对 column1 之后的下一列有什么作用?

【问题讨论】:

  • 我将qualify 与 Teradata 相关联,所以我添加了标签。请确保您的问题中的数据库标签是正确的。
  • 它独立于 Teradata:RANK 将相同的数字分配给同一组列,即如果这 4 列中的任何一个列的值发生变化,则 RANK 会增加。
  • @GordonLinoff Snowflake 也有 qualify 子句
  • @甘道夫。 . .真的。但它没有损坏的rank() 功能。

标签: sql transactions teradata rank


【解决方案1】:

首先,强烈建议不要使用RANK()。请参阅documentation

更好的写法是:

QUALIFY RANK() OVER (ORDER BY column1 ASC, column2 ASC, column3 , column4) = 1

这相当于返回所有符合以下条件的行:

  1. column1 具有最小值。
  2. column2 具有 (1) 中所有内容的最小值。
  3. column3 具有 (2) 中所有内容的最小值。
  4. column4 具有 (3) 中所有内容的最小值。

也就是说,数据按四个键排序并返回第一行 - 以及在四个键上匹配它的所有行。

【讨论】:

  • 应该是ORDER BY column1, column2, column3 DESC, column4 DESC,因为旧的旧语法默认为DESC
猜你喜欢
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2012-05-30
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多