주어진 순서와 빈 임의 값으로 MySQL 테이블 정렬

Roel Vermeulen

순서 가있는 MySQL 테이블 섹션 이 있습니다 . 정렬 값 중 일부 는 숫자이며 상호 배타적이며 (두 숫자가 같지 않음) 다른 값은 단순 NULL 입니다.

예:

ID Ordering
-- --------
1  NULL
2  2
3  5
4  NULL
5  NULL
6  3
7  NULL

이제이 테이블을 정렬하고 다음 결과를 얻고 싶습니다.

(ROW NUMBER) ID  Ordering
------------ --  -------- ------------
1            4   NULL
2            2   2
3            6   3
4            5   NULL
5            3   5
6            7   NULL
7            1   NULL

즉, NULL이 아닌 값을 가진 행이 주어진 순서 대로 나타나기를 원 하지만 NULL 값을 가진 행 은 무작위 순서로 (예측 불가능) 나머지 행에 나타나기를 원합니다 .

빈 공간을 채우기에 항상 충분한 NULL이 있다고 확신합니다.

먼저 주문이있는 항목 (WHERE ordering IS NOT NULL)을 얻은 다음 순서가없는 항목 (WHERE ordering IS NULL)을 얻은 다음 어떻게 든 NULL이있는 항목을 그렇지 않은 숫자로 변환하는 추가 열을 생성하는 것에 대해 생각하고있었습니다. t는 전자에 나타납니다.

어떤 도움이라도 대단히 감사하겠습니다. 위치가 고정 된 섹션이 있지만 다른 섹션은 임의의 순서를 갖도록 설정할 수있는 프로젝트에서 이것을 사용하고 있습니다. 페이지가로드 될 때마다 무작위 섹션이 무작위로 표시되어야합니다.

Roel Vermeulen

해결책을 찾았지만 다소 어색하고 큽니다. 그 이유를 설명하겠습니다.

  • 1에서 행 수까지의 숫자 목록을 가져옵니다 (그리고 all_rows 라고 부릅니다 ).
  • 순서가 NULL이 아닌 섹션을 가져옵니다.
  • 이 두 가지를 십시오. 즉, 이미 존재하는 주문 목록에없는 것을 all_rows 에서 가져 와서 행 번호를 부여하십시오. (이것을 unused_row_numbers라고 부르세요 )
  • 순서가 NULL 인 섹션을 가져 와서 임의 화하고 행 번호를 제공하십시오. (이것을 nulls_with_row_numbers라고 부르세요)
  • unused_row_numbers를 nulls_with_row_numbers와 결합하여 순서가 NULL이고 이제 누락 / 미사용 행 번호 중 하나를 갖는 모든 섹션을 가져옵니다.
  • 마지막으로,이 마지막 하나를 이미 주문과 타타 아아를 가지고있는 것들과 결합하십시오 ...

이제 SQL은 다음과 같습니다.

SELECT row_number, id
FROM (
  SELECT @curRow2 := @curRow2 + 1 AS row_number2, row_number
  FROM (
    SELECT @curRow := @curRow + 1 AS row_number
    FROM Sections
    JOIN (SELECT @curRow := 0) r
  ) all_rows
  JOIN (SELECT @curRow2 := 0) r
  WHERE all_rows.row_number NOT IN (
    SELECT ordering
    FROM Sections
    WHERE ordering IS NOT NULL
  )) unused_row_numbers,
(
  SELECT @curRow3 := @curRow3 + 1 AS row_number3, id
  FROM (
    SELECT ordering, id
    FROM Sections
    WHERE ordering IS NULL
    ORDER BY RAND()
  ) randomized_nulls
  JOIN (SELECT @curRow3 := 0) r
) nulls_with_row_numbers
WHERE unused_row_numbers.row_number2 = nulls_with_row_numbers.row_number3

UNION

SELECT ordering AS row_number, id
FROM Sections
WHERE ordering IS NOT NULL

ORDER BY row_number

매번 다른 결과를 제공합니다. 결과 예 :

ROW_NUMBER ID
---------- --
1          1  (random)
2          2  (always second position)
3          6  (always third position)
4          4  (random)
5          3  (random)
6          5  (always sixth position)
7          7  (random)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

주어진 순서와 빈 임의 값으로 MySQL 테이블 정렬

분류에서Dev

주어진 값으로 테이블에서 값을 찾고 유사한 다른 값을 찾는 MySQL 쿼리

분류에서Dev

MySQL-큰 테이블에서 다양한 값을 가진 열로 정렬

분류에서Dev

빈 테이블 (mysql)에서 열의 기본값 선택

분류에서Dev

mysql에서 주어진 값 세트에서 테이블의 모든 행에 대해 열을 설정하는 방법

분류에서Dev

MySQL은 중복없이 다른 테이블에서 임의의 값으로 업데이트 테이블

분류에서Dev

MySQL의 주어진 테이블에서 행이 삭제 될 때 기록

분류에서Dev

주어진 2 사이의 임의 값으로 mySQL 열 업데이트 (소수점 포함)

분류에서Dev

mysql 테이블에서 고유 값을 가져와 발생 횟수로 정렬

분류에서Dev

Laravel 2 테이블은 주어진 FK 값을 가진 오른쪽 테이블의 멤버와 병합 된 왼쪽 테이블의 모든 테이블 조인

분류에서Dev

테이블 mysql의 From 및 To 열에서 주어진 번호 확인

분류에서Dev

MySQL JOIN 쿼리 도움말 : 내림차순으로 정렬 된 별개의 오른쪽 테이블 행으로 두 테이블 조인

분류에서Dev

주어진 값의 BST 조회에서이 특정 값을 몇 가지 방법으로 볼 수 있습니까?

분류에서Dev

조인 된 테이블의 행 (열이 아님)의 값을 기준으로 mysql 쿼리 결과를 정렬하려면 어떻게해야합니까?

분류에서Dev

주어진 정렬 순서로 컬렉션 정렬

분류에서Dev

1) 목록의 여러 테이블을 내림차순으로 정렬하려면 어떻게합니까? 2) 여러 테이블의 하나의 목록에서 데이터 프레임을 어떻게 생성합니까?

분류에서Dev

동일한 발생으로 주어진 문자에서 고정 길이의 임의 문자열 생성

분류에서Dev

테이블에서 테이블 임의 값 설정

분류에서Dev

mysql 테이블의 단일 열에서 주어진 합계와 동일한 숫자 조합 찾기

분류에서Dev

mysql 제로 다운 타임 ALTER 테이블 정렬 (percona, openark 등)

분류에서Dev

데이터 테이블을 알파벳순으로 알파벳순으로 정렬 한 다음 R의 숫자 값으로 정렬합니다.

분류에서Dev

MySQL에서 임의의 이름으로 임시 테이블 만들기

분류에서Dev

주어진 값과 빈 간선, MATLAB에서 각 값의 빈 찾기

분류에서Dev

자체 참조 테이블에 대해 오름차순으로 정렬 순서를 유지하는 MySQL 쿼리

분류에서Dev

특정 형식으로 주어진 열을 정렬하여 테이블을 정렬하는 방법

분류에서Dev

Pandas Python : 레이블로 주어진 행을 제외하면서 df 정렬

분류에서Dev

빈도 테이블에서 중간 값 얻기 (카운팅 정렬)

분류에서Dev

XSL : 임의 순서 문자열에서 고정 순서 테이블로

분류에서Dev

mysql- 열에서 마지막으로 빈 값과 null 값을 기준으로 정렬 목록

Related 관련 기사

  1. 1

    주어진 순서와 빈 임의 값으로 MySQL 테이블 정렬

  2. 2

    주어진 값으로 테이블에서 값을 찾고 유사한 다른 값을 찾는 MySQL 쿼리

  3. 3

    MySQL-큰 테이블에서 다양한 값을 가진 열로 정렬

  4. 4

    빈 테이블 (mysql)에서 열의 기본값 선택

  5. 5

    mysql에서 주어진 값 세트에서 테이블의 모든 행에 대해 열을 설정하는 방법

  6. 6

    MySQL은 중복없이 다른 테이블에서 임의의 값으로 업데이트 테이블

  7. 7

    MySQL의 주어진 테이블에서 행이 삭제 될 때 기록

  8. 8

    주어진 2 사이의 임의 값으로 mySQL 열 업데이트 (소수점 포함)

  9. 9

    mysql 테이블에서 고유 값을 가져와 발생 횟수로 정렬

  10. 10

    Laravel 2 테이블은 주어진 FK 값을 가진 오른쪽 테이블의 멤버와 병합 된 왼쪽 테이블의 모든 테이블 조인

  11. 11

    테이블 mysql의 From 및 To 열에서 주어진 번호 확인

  12. 12

    MySQL JOIN 쿼리 도움말 : 내림차순으로 정렬 된 별개의 오른쪽 테이블 행으로 두 테이블 조인

  13. 13

    주어진 값의 BST 조회에서이 특정 값을 몇 가지 방법으로 볼 수 있습니까?

  14. 14

    조인 된 테이블의 행 (열이 아님)의 값을 기준으로 mysql 쿼리 결과를 정렬하려면 어떻게해야합니까?

  15. 15

    주어진 정렬 순서로 컬렉션 정렬

  16. 16

    1) 목록의 여러 테이블을 내림차순으로 정렬하려면 어떻게합니까? 2) 여러 테이블의 하나의 목록에서 데이터 프레임을 어떻게 생성합니까?

  17. 17

    동일한 발생으로 주어진 문자에서 고정 길이의 임의 문자열 생성

  18. 18

    테이블에서 테이블 임의 값 설정

  19. 19

    mysql 테이블의 단일 열에서 주어진 합계와 동일한 숫자 조합 찾기

  20. 20

    mysql 제로 다운 타임 ALTER 테이블 정렬 (percona, openark 등)

  21. 21

    데이터 테이블을 알파벳순으로 알파벳순으로 정렬 한 다음 R의 숫자 값으로 정렬합니다.

  22. 22

    MySQL에서 임의의 이름으로 임시 테이블 만들기

  23. 23

    주어진 값과 빈 간선, MATLAB에서 각 값의 빈 찾기

  24. 24

    자체 참조 테이블에 대해 오름차순으로 정렬 순서를 유지하는 MySQL 쿼리

  25. 25

    특정 형식으로 주어진 열을 정렬하여 테이블을 정렬하는 방법

  26. 26

    Pandas Python : 레이블로 주어진 행을 제외하면서 df 정렬

  27. 27

    빈도 테이블에서 중간 값 얻기 (카운팅 정렬)

  28. 28

    XSL : 임의 순서 문자열에서 고정 순서 테이블로

  29. 29

    mysql- 열에서 마지막으로 빈 값과 null 값을 기준으로 정렬 목록

뜨겁다태그

보관