我有一个 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 |
+----+------------+-------------+-------+
Run Code Online (Sandbox Code Playgroud)
我需要标记提供最大库存的供应商并得到以下结果:
+----+------------+-------------+-------+------+
| 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 |
+----+------------+-------------+-------+------+
Run Code Online (Sandbox Code Playgroud)
我对这个问题的理解是,我需要从确定最大股票价值行 ID 的选择中进行选择,但我不知道如何到达那里。我被困住了...需要你的帮助 stackoverflow 的骑士!
使用窗口函数:
select t.*,
(case when stock = max(stock) over (partition by article_id)
then 1 else 0
end) as flag
from t;
Run Code Online (Sandbox Code Playgroud)
注意:如果多个供应商都具有相同的最大值,这将标记多个供应商。如果您只想要一个,请使用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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |