sourcecode

mysql 쿼리에서 일련 번호 생성

copyscript 2023. 10. 26. 21:22
반응형

mysql 쿼리에서 일련 번호 생성

나는 테이블이 있습니다: student_marks.

marks
-----
  44
  55
  64
  98
  76

예상 출력:

serial_number|marks
--------------------
  1          | 44
  2          | 55
  3          | 64
  4          | 98
  5          | 76

mysql 사용자 정의 변수를 사용하면 쿼리를 사용할 수 있습니다.

 set  @a:=0;select @a:=@a+1 serial_number, marks from student_marks;

사용자 정의 변수를 사용하지 않고 msyql에서 이를 달성할 수 있는 방법이 있습니까?

사용자 정의 변수를 사용하고 싶지 않은 이유에 따라 초기화를 위한 쿼리와 사용을 위한 쿼리 두 개를 사용하지 않기를 원하는 경우 다음을 사용할 수 있습니다.

SELECT  @a:=@a+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;

이 질문에 대한 모범적인 답변은 다음과 같은 모범적인 사례여야 합니다.

SET @count:=0;
SELECT  (@count:=@count+1) AS serial_number, 
        marks 
FROM    student_marks

열(c5)이 있는 테이블에 숫자 x가 포함되어 있습니다. 같은 행 x를 여러 번 반복하는 sql 식을 필요로 합니다.

내 테이블 A에는 다음이 포함됩니다.

c1  c2  c3  c4  c5
16  1   2   16  3
16  1   2   17  2 
16  1   2   18  1

필요한 것은 다음과 같은 것이 필요합니다.

c1  c2  c3  c4  c5  n
16  1   2   16  3   1
16  1   2   16  3   2
16  1   2   16  3   3
16  1   2   17  2   1
16  1   2   17  2   2
16  1   2   18  1   1

나는 다음과 같은 표현으로 그것을 해결했습니다.

SELECT
    c1, c2, c3, c4, c5, row_number AS n
FROM
    (
        SELECT
            @curRow := @curRow + 1 AS row_number
        FROM
            tablea
        JOIN (SELECT @curRow := 0) r
        WHERE
            @curRow < (
                SELECT
                    max(field1)
                FROM
                    tablea
            )
    ) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;

mysql 5.6에서 테스트됨:

SELECT
    @a:=@a+1 as serial_number,
    student.* 
FROM
    student
join (SELECT @a:= 0) a

추가할 수 있습니다.serial number다음 쿼리를 사용합니다.

set @counter=0;
SELECT  @counter:=@counter+1 as serial_number from <table_name>

출력:

   |...............................|
   | serial_number  |   first_name |
   |...............................|
   |      1         |    mojtaba   |
   |      2         |    athena    |
   |      3         |     azin     |
   |      4         |     ava      |
   |      5         |    arash     |
   |...............................|

추가로 사용하려면where

set @counter=0;
select serial_number from (SELECT  @counter:=@counter+1 as serial_number 
from <table_name>) as tbl_counter where serial_number > 3

출력:

   |...............................|
   | serial_number  |   first_name |
   |...............................|
   |      4         |     ava      |
   |      5         |    arash     |
   |...............................|

일련번호를 생성하는 간단한 방법을 찾았습니다

select ROW_NUMBER() over (PARTITION by '1') AS serial_number,customer_id from users;

또한 페이지화를 지원합니다.

없어요.하지만 데이터베이스가 아닌 프로그램 쪽에서 serial_number를 생성할 수 있습니다.

다른 쿼리에서 변수를 null로 초기화해야 하므로 위의 답변 중 어느 것도 만족스럽지 않은 것 같습니다.

따라서 아래의 모든 포괄적인 솔루션을 게시합니다.

SELECT ROUND(@a:=@a+1,0) sr_num, t.* from (select @a:=0) initvars, your_table t;

@a:=@a+1 serial_no,

크로스조인(SELECT @a:= 0) ASA

SELECT @a:=@a+1 serial_no, sc.id, sc.name, sc.address, c.country,s.state 
FROM oc_table1 sc CROSS JOIN (SELECT @a:= 0) AS a LEFT JOIN oc_table2 .......

ALTER TABLE_name ADD COLUMN sr_nINT UNIQUE NOT NULL AUTO_INCREMENT FIRST;

일련 번호에 대한 열을 만드는 것을 잊어버린 경우를 대비하여 기본 테이블까지 편집할 수 있습니다.또한 이 방법을 사용하여 sr_no 열을 두 개의 다른 열에 추가하고 쉽게 결합할 수 있습니다(또는 두 열을 모두 사용하여 새 테이블을 만들 수도 있습니다).

자동증강장으로 만드는 게 어때요?

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

아니요, 이 숫자들이 들어 있는 열이 없는 한요.

답변이 매우 늦었지만, 두 개의 쿼리를 사용하지 않고 조인을 사용하지 않고 하위 쿼리를 사용하지 않고 순차 ID를 생성하는 것입니다.

SELECT *, (@cnt := if(@cnt IS NULL, 0,  @cnt) + 1) AS id FROM table_name;

건배.

언급URL : https://stackoverflow.com/questions/11094466/generate-serial-number-in-mysql-query

반응형