SQLに行番号を順番に追加する方法はありますかキーグループごとに?
任意の(CODE、NAME)タプルを持つテーブルを想定します。表の例:
CODE NAME
---- ----
A Apple
A Angel
A Arizona
B Bravo
C Charlie
C Cat
D Dog
D Doppler
D Data
D Down
グループ化属性としてCODEを使用した望ましい投影:
CODE C_NO NAME
---- ---- ----
A 0 Apple
A 1 Angel
A 2 Arizona
B 0 Bravo
C 1 Charlie
C 0 Cat
D 0 Dog
D 1 Data
D 2 Down
D 3 Doppler
ありがとう、
MySQLはAFAIKを行いません。これはほとんどの拠点をカバーしています。
SELECT
CODE,
ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
NAME
FROM
MyTable
MySQL(およびおそらく他のほとんどのデータベース):
select g.CODE
, count(*)-1 as C_NO
, g.NAME
from MyTable as g
left join MyTable as o
on g.CODE = o.CODE
and g.NAME >= o.NAME
group by g.CODE
, g.NAME;
MySQLに固有:
DELIMITER $$
CREATE PROCEDURE NumberRowsByGroup()
BEGIN
SET @code := 0;
SET @num := 0;
SELECT CODE, C_NO, NAME FROM
( select q.CODE
, q.NAME
, @num := IF(q.CODE = @code, @num + 1, 0) as C_NO
, @code := q.CODE as previous
from yourTable q
order by CODE
, NAME
) as p
;
END$$
DELIMITER ;
次に、次のように呼び出すことができます。
CALL NumberRowsByGroup();
Xaprb.com/blogの投稿によると: how-to-number-rows-in-mysql 、2番目の方が高速です。