sql - 如何标记具有最大值的行

标签 sql sql-server

我有一个标识每一行的 ID、一个 article_ID、一个 supplier_ID 和一个库存。

+----+------------+-------------+-------+
| ID | article_ID | supplier_ID | stock |
+----+------------+-------------+-------+
| 1  | 1          | 1           | 18    |
| 2  | 1          | 2           | 1     |
| 3  | 1          | 3           | 20    |
| 4  | 2          | 1           | 5     |
| 5  | 2          | 2           | 40    |
| 6  | 3          | 1           | 56    |
| 7  | 3          | 3           | 7     |
| 8  | 3          | 4           | 12    |
+----+------------+-------------+-------+

我需要标记提供最大库存的供应商并获得以下结果:

+----+------------+-------------+-------+------+
| ID | article_ID | supplier_ID | stock | flag |
+----+------------+-------------+-------+------+
| 1  | 1          | 1           | 18    | 0    |
| 2  | 1          | 2           | 1     | 0    |
| 3  | 1          | 3           | 20    | 1    |
| 4  | 2          | 1           | 5     | 0    |
| 5  | 2          | 2           | 40    | 1    |
| 6  | 3          | 1           | 56    | 1    |
| 7  | 3          | 3           | 7     | 0    |
| 8  | 3          | 4           | 12    | 0    |
+----+------------+-------------+-------+------+

我对这个问题的理解是,我需要从我标识最大股票值(value)行 ID 的选择中进行选择,但我不知道如何到达那里。 我卡住了...需要你的帮助 stackoverflow 的骑士们!

最佳答案

使用窗口函数:

select t.*,
       (case when stock = max(stock) over (partition by article_id)
             then 1 else 0
        end) as flag
from t;

注意:这将标记多个供应商,如果它们都具有相同的最大值。如果您只想要一个,请使用 row_number():

select t.*,
       (case when row_number() over (partition by article_id order by stock desc) = 1
             then 1 else 0
        end) as flag
from t;

关于sql - 如何标记具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54675780/

相关文章:

java - HIbernate 查询语言错误

sql - T-SQL 中的 RaiseError 命令

SQL 连接到相关子查询,其中表通过重叠范围相关

sql-server - 过程或函数指定的参数过多 SSRS

SQLite - 为每个字段创建和索引

mysql - SQL:如何比较表,即计算连接表中的行数?

sql - Entity Framework 中的空间连接

sql-server - 如何验证或测试 SQL Server 中是否触发了触发器

SQL Server,将具有多行html代码的文本解析为表格

sql-server - SQL Server中的Case语句中的语法错误