-2

私はインタビューのラウンドでこの質問に出くわしました。テーブルには次の列があります。

ID
1
2
3
4
5
6
7
8
9
11
12
13
14
15
16
17
18
19
20
22
23
24
26

問題は、「1」で始まり、5 の倍数があるたびに次の ID で増加する新しい列を作成することです。したがって、期待される出力は次のとおりです。

ID 結果
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2
9 2
11 2
12 2
13 2
14 2
15 2
16 3
17 3
18 3
19 3
20 3
22 4
23 4
24 4
26 4
4

3 に答える 3

2

LAG()との 2 つのウィンドウ関数を組み合わせることができますSUM()。例えば:

select id, 
  1 + sum(case when lid % 5 = 0 then 1 else 0 end) over(order by id) as v
from (
  select *, lag(id) over(order by id) as lid from t
) x
order by id

結果:

 id  v 
 --  - 
 1   1 
 2   1 
 3   1 
 4   1 
 5   1 
 6   2 
 7   2 
 8   2 
 9   2 
 11  2 
 12  2 
 13  2 
 14  2 
 15  2 
 16  3 
 17  3 
 18  3 
 19  3 
 20  3 
 22  4 
 23  4 
 24  4 
 26  4 

DB Fiddleで実行例を参照してください。

于 2021-02-17T03:42:48.617 に答える
1

MySQL 5+ の場合は、たとえば次のように使用できます。

SELECT id, (@result := COALESCE( @result + !(id % 5), 1 )) - !(id % 5) result
FROM t
CROSS JOIN (SELECT @result := NULL) init_variable
ORDER BY id

MySQL 8 以降で使用する場合

SELECT id, 1 + SUM(!(id % 5)) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) resuls
FROM t
于 2021-02-17T05:13:11.503 に答える