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
'source' 카테고리의 다른 글
PHP에서 PUT/DELETE 인수 처리 (0) | 2022.11.04 |
---|---|
처음 실행된 스크립트의 절대 경로를 가져옵니다. (0) | 2022.11.04 |
그림에 호버링 주석을 추가하는 방법 (0) | 2022.11.04 |
Java .class 파일을 사람이 읽을 수 있는 방법으로 열려면 어떻게 해야 합니까? (0) | 2022.11.04 |
임시 디렉토리를 만들고 경로/파일 이름을 가져오려면 어떻게 해야 합니까? (0) | 2022.11.04 |