source

MySQL SELECT 증분 카운터

manysource 2022. 11. 4. 23:32

MySQL SELECT 증분 카운터

MySQL 쿼리는 다음과 같습니다.

SELECT name FROM table;

증가 카운터를 선택하기 위해name? 예상 출력:

Jay 1
roy 2
ravi 3
ram 4
select name,
      @rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name

이 부분:

cross join (select @rownum := 0) r

를 사용하면 별도의 쿼리 없이 변수를 도입할 수 있습니다.따라서 첫 번째 쿼리는 다음과 같은 두 가지 쿼리로 나눌 수도 있습니다.

set @rownum := 0;

select name,
      @rownum := @rownum + 1 as row_number
from your_table
order by name;

예를 들어 저장 프로시저에서 사용되는 경우.

MySQL 8 이상에서는 Window 기능도 사용할 수 있습니다.

SELECT
    name,
    ROW_NUMBER() OVER ()
FROM table

결과:

Jay  1
roy  2
ravi 3
ram  4

juergen d에서 알 수 있듯이, pergen d를 붙이는 것은 좋은 생각일 것입니다.ORDER BY결정론적 쿼리를 갖게 됩니다.

ORDER BY는 쿼리 및 카운터에 개별적으로 적용할 수 있습니다.그래서:

SELECT
    name,
    ROW_NUMBER() OVER (ORDER BY name DESC)
FROM table
ORDER BY name

카운터가 내림차순으로 표시됩니다.

결과:

Jay  4
ram  3
ravi 2
roy  1
SELECT name,
      @rownum := @rownum + 1 as row_number
FROM your_table
   ,
   (select @rownum := 0) r

콤마 대신 쉼표를 사용하는 것이 아니라CROSS JOIN동작 속도가 빨라집니다.사용.CROSS JOIN그러면 테이블에 열을 추가하는 단계가 하나 추가됩니다.

쿼리가 다음과 같은 경우 크로스 조인 및 콤마가 있는 솔루션은 작동하지 않습니다.GROUP BY진술.이러한 경우 하위 선택을 사용할 수 있습니다.

SELECT (@row_number := @row_number + 1) AS rowNumber, res.*
FROM
(
  SELECT SUM(r.amount) 
  FROM Results r 
  WHERE username = 1 
  GROUP BY r.amount
) res
CROSS JOIN (SELECT @row_number := 0) AS dummy

이 사건에 직면한 사람이 있나요?

select name,
  @rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name desc;

결과는

roy  4
ravi 3
ram  2
jay  1

하지만 내가 원하는 것은

roy  1
ravi 2
ram  3
jay  4

mariadb version 10.5.9로 문의했을 때 결과는 제가 원하는 것과 같았지만 mariabd version 10.6.10이나 10.9.2로 시험해보니 제가 예상하지 못한 결과가 나왔습니다.

언급URL : https://stackoverflow.com/questions/13566695/mysql-select-increment-counter