SQL select 문에서 Order By 1의 목적은 무엇입니까?


154

직장에서 오래된 코드를 읽고 있는데 order by 1절이 있는 여러 가지 견해가 있음을 알았습니다 . 이것이 무엇을 달성합니까?

예:

Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME CONDITION) AS SUM_X,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME OTHER CONDITION) AS SUM_Y    
FROM payment A    
ORDER BY 1;

5
참고 : 뷰가 프리젠 테이션 용으로 만 사용되도록 보장 할 수없는 경우 일반적으로 뷰에 ORDER BY가있는 것은 나쁜 습관으로 간주됩니다. ORDER BY와 함께 다른 쿼리에서 뷰를 사용하면 ORDER BY가 2 배 발생하기 때문에 낭비입니다.
OMG Ponies

3
@OMG 조랑말은 : 일반적으로 가지고 불법으로 간주 ORDER BYA의를 VIEW. 표준 SQL은 허용하지 않습니다. SQL Server는 2005 년 이래로이를 금지했습니다.이를 구현하는 SQL 구현의 경우 동작이 크게 문서화되지 않고 직관적입니다. 다시 말해, 피해야 할 것입니다.
onedaywhen

@onedaywhen : 합창단에게 설교하고 있지만 MySQL 은 Oracle IME와 마찬가지로 views에서 ORDER BY를 허용 합니다. SQL Server는 ORDER BY가 있으면 허용 TOP하고 SSMS는 추가를 좋아합니다 TOP 100 PERCENT.
OMG Ponies

@OMG Ponies @ "MySQL은 뷰에서 ORDER BY를 허용합니다."-MySQL은 CHECK제약 조건을 허용 CREATE TABLE하지만 실제로는이를 존중하지 않습니다. 실제로 확인되지 않습니다! 문제는 이러한 SQL 제품 이 조회에서 항상 두 배로 정렬 되는 쿼리에서 사용될 때 항상 보기를 존중 하는 것입니까? 그들은 심지어 행동을 문서화하거나 실행 계획을 조사해야합니까? 나는 우리가 답을 알고 있다고 생각합니다.)ORDER BYORDER BY
어느 날

참고 방금 ORDER BY 1빈 별칭을 원할 때 교차 적용 트릭을 사용하는 또 다른 용도를 발견했습니다 . 불행히도 코드는 주석에 비해 너무 커서 FYI 아래에 답변으로 게시했습니다.
AndrewD

답변:


208

이:

ORDER BY 1

... "Ordinal"이라고합니다.이 숫자는 SELECT 절에 정의 된 열 수를 기준으로 한 열을 나타냅니다. 제공 한 쿼리에서 다음을 의미합니다.

ORDER BY A.PAYMENT_DATE

다음과 같은 이유로 권장되지 않습니다.

  1. 명확하지 않거나 명시 적이 지 않다
  2. 열 순서가 변경 되어도 쿼리는 여전히 유효하므로 의도하지 않은 순서로 정렬 할 위험이 있습니다.

1
Ordinals를 사용하는 것에 대한 거꾸로 있는지 묻는 내 질문 : stackoverflow.com/questions/2253040/…
OMG Ponies

sql태그 만 있습니다 . OREDER BY이론적으로 테이블 상관 이름이 범위를 벗어 났기 때문에 표준 SQL에서는 열 상관 이름 만 절에 허용됩니다 ORDER BY PAYMENT_DATE;. 물론 모든 SQL 구현이 표준을 준수하는 것은 아닙니다.
onedaywhen

SQL Server에서 테스트 및 작업;WITH cte AS( SELECT 1 AS Col1, 'z' AS Col2 UNION SELECT 2 AS Col1, 'y' AS Col2 UNION SELECT 3 AS Col1, 'x' AS Col2 ) SELECT Col2, Col1 FROM cte ORDER BY 1
Ivanzinho

@OMG Ponies, 당신은 그것이 권장되는 실천이 아니라고 언급했는데, 다음으로 가장 좋은 대체물은 무엇입니까? 내가 궁금해서 cuz를 묻는다.. 감사합니다!
dian jin

40

집합 기반 연산자 (예 : 공용체)를 사용할 때 유용합니다

select cola
  from tablea
union
select colb
  from tableb
order by 1;

4
아하. 이것이 내가 지금까지 본 첫 번째 좋은 이유입니다.
에코

4
@Lazer 나는 그것을 믿지 않습니다. 연합을 수행하기 위해서는 아마도 내부적으로 정렬 할 것입니다. 그러나 이것은 논리적 출력 질문과 달리 구현 질문이며 SQL의 정신에서는 행을 순서대로 출력 할 필요가 없습니다. 또한 내림차순으로 정렬하려면 어떻게해야합니까? 그런 다음 원래 문제로 돌아갑니다.
daven11 2016 년

3
아직도 ... 차라리 사용 order by tablea.cola
하겠습니다

1
@ShaharShokrani는 작동하지 않습니다. 그러나 당신은 말할 수 있습니다, 나는 tablea union에서 x로 select cola를 선호합니다.
Ozgur Ozturk

select * from (tablea union select colb col from tableb에서 선택) col col에 의해 주문
hareluya86

8

단순히 쿼리 결과의 첫 번째 열로 뷰 또는 테이블을 정렬하는 것을 의미합니다.



7

결과가 반환 된 첫 번째 열을 기준으로 정렬됩니다. 이 예에서는 payment_date를 기준으로 정렬합니다.


4

다른 답변에서 언급했듯이 ORDER BY 1첫 번째 열의 주문.

나는 당신이 그것을 사용할 수있는 또 다른 예를 보았습니다. 동일한 열을 선택하도록 주문해야하는 특정 쿼리가 있습니다. Name아래에서 주문하면 SQL 오류가 발생 합니다.

SELECT Name, Name FROM Segment ORDER BY 1

왜 그렇게 하시겠습니까? 별명을 지정하지 않는 이유는 무엇입니까? [너무 늦었지만 댓글]
abdul qayyum

1
@abdulqayyum 그것은 실제로 일을하는 또 다른 방법입니다. 위의 예는 매우 간단합니다. 때로는 '이름'열이 실제로 다른 테이블에 삽입하는 다른 테이블과 다른 열입니다. 여러 개의 별칭을 추가하면 읽기가 더 어려워 질 수 있습니다. 사용되는 또 다른 예는 많은 다른 계산을 선택하고 별명을 지정할 필요없이 하나씩 순서대로 정렬하려는 경우입니다. (여기서는 개인적으로 계산이 무엇인지 말하려는 별칭을 선호하지만)
nicV


-1

샘플 테스트 WAMP 서버 데이터베이스의 예제는 다음과 같습니다.

mysql> select * from user_privileges;

| GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
   +--------------------+---------------+-------------------------+--------------+
| 'root'@'localhost' | def           | SELECT                  | YES          |
| 'root'@'localhost' | def           | INSERT                  | YES          |
| 'root'@'localhost' | def           | UPDATE                  | YES          |
| 'root'@'localhost' | def           | DELETE                  | YES          |
| 'root'@'localhost' | def           | CREATE                  | YES          |
| 'root'@'localhost' | def           | DROP                    | YES          |
| 'root'@'localhost' | def           | RELOAD                  | YES          |
| 'root'@'localhost' | def           | SHUTDOWN                | YES          |
| 'root'@'localhost' | def           | PROCESS                 | YES          |
| 'root'@'localhost' | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | REFERENCES              | YES          |
| 'root'@'localhost' | def           | INDEX                   | YES          |
| 'root'@'localhost' | def           | ALTER                   | YES          |
| 'root'@'localhost' | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost' | def           | SUPER                   | YES          |
| 'root'@'localhost' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | LOCK TABLES             | YES          |
| 'root'@'localhost' | def           | EXECUTE                 | YES          |
| 'root'@'localhost' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost' | def           | CREATE VIEW             | YES          |
| 'root'@'localhost' | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost' | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost' | def           | CREATE USER             | YES          |
| 'root'@'localhost' | def           | EVENT                   | YES          |
| 'root'@'localhost' | def           | TRIGGER                 | YES          |
| 'root'@'localhost' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'127.0.0.1' | def           | SELECT                  | YES          |
| 'root'@'127.0.0.1' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | UPDATE                  | YES          |
| 'root'@'127.0.0.1' | def           | DELETE                  | YES          |
| 'root'@'127.0.0.1' | def           | CREATE                  | YES          |
| 'root'@'127.0.0.1' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | RELOAD                  | YES          |
| 'root'@'127.0.0.1' | def           | SHUTDOWN                | YES          |
| 'root'@'127.0.0.1' | def           | PROCESS                 | YES          |
| 'root'@'127.0.0.1' | def           | FILE                    | YES          |
| 'root'@'127.0.0.1' | def           | REFERENCES              | YES          |
| 'root'@'127.0.0.1' | def           | INDEX                   | YES          |
| 'root'@'127.0.0.1' | def           | ALTER                   | YES          |
| 'root'@'127.0.0.1' | def           | SHOW DATABASES          | YES          |
| 'root'@'127.0.0.1' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'127.0.0.1' | def           | LOCK TABLES             | YES          |
| 'root'@'127.0.0.1' | def           | EXECUTE                 | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'127.0.0.1' | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | SHOW VIEW               | YES          |
| 'root'@'127.0.0.1' | def           | CREATE ROUTINE          | YES          |
| 'root'@'127.0.0.1' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | CREATE USER             | YES          |
| 'root'@'127.0.0.1' | def           | EVENT                   | YES          |
| 'root'@'127.0.0.1' | def           | TRIGGER                 | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'::1'       | def           | SELECT                  | YES          |
| 'root'@'::1'       | def           | INSERT                  | YES          |
| 'root'@'::1'       | def           | UPDATE                  | YES          |
| 'root'@'::1'       | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | DROP                    | YES          |
| 'root'@'::1'       | def           | RELOAD                  | YES          |
| 'root'@'::1'       | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | FILE                    | YES          |
| 'root'@'::1'       | def           | REFERENCES              | YES          |
| 'root'@'::1'       | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | SHOW DATABASES          | YES          |
| 'root'@'::1'       | def           | SUPER                   | YES          |
| 'root'@'::1'       | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'::1'       | def           | LOCK TABLES             | YES          |
| 'root'@'::1'       | def           | EXECUTE                 | YES          |
| 'root'@'::1'       | def           | REPLICATION SLAVE       | YES          |
| 'root'@'::1'       | def           | REPLICATION CLIENT      | YES          |
| 'root'@'::1'       | def           | CREATE VIEW             | YES          |
| 'root'@'::1'       | def           | SHOW VIEW               | YES          |
| 'root'@'::1'       | def           | CREATE ROUTINE          | YES          |
| 'root'@'::1'       | def           | ALTER ROUTINE           | YES          |
| 'root'@'::1'       | def           | CREATE USER             | YES          |
| 'root'@'::1'       | def           | EVENT                   | YES          |
| 'root'@'::1'       | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | CREATE TABLESPACE       | YES          |
| ''@'localhost'     | def           | USAGE                   | NO           |
+--------------------+---------------+-------------------------+--------------+
85 rows in set (0.00 sec)

그리고 그것이 추가 order by PRIVILEGE_TYPE로 주어 지거나 주어질 수있을 때 order by 3. 3 번째 열 ( PRIVILEGE_TYPE)을 알파벳순으로 정렬합니다.

mysql> select * from user_privileges order by PRIVILEGE_TYPE;
+--------------------+---------------+-------------------------+--------------+
| GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
+--------------------+---------------+-------------------------+--------------+
| 'root'@'127.0.0.1' | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | ALTER                   | YES          |
| 'root'@'localhost' | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | CREATE                  | YES          |
| 'root'@'localhost' | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost' | def           | CREATE ROUTINE          | YES          |
| 'root'@'127.0.0.1' | def           | CREATE ROUTINE          | YES          |
| 'root'@'::1'       | def           | CREATE TABLESPACE       | YES          |
| 'root'@'localhost' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'::1'       | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | CREATE USER             | YES          |
| 'root'@'127.0.0.1' | def           | CREATE USER             | YES          |
| 'root'@'::1'       | def           | CREATE USER             | YES          |
| 'root'@'localhost' | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | CREATE VIEW             | YES          |
| 'root'@'::1'       | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | DELETE                  | YES          |
| 'root'@'localhost' | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | DROP                    | YES          |
| 'root'@'localhost' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | EVENT                   | YES          |
| 'root'@'::1'       | def           | EVENT                   | YES          |
| 'root'@'localhost' | def           | EVENT                   | YES          |
| 'root'@'127.0.0.1' | def           | EXECUTE                 | YES          |
| 'root'@'::1'       | def           | EXECUTE                 | YES          |
| 'root'@'localhost' | def           | EXECUTE                 | YES          |
| 'root'@'127.0.0.1' | def           | FILE                    | YES          |
| 'root'@'::1'       | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | INDEX                   | YES          |
| 'root'@'127.0.0.1' | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | INSERT                  | YES          |
| 'root'@'localhost' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | LOCK TABLES             | YES          |
| 'root'@'::1'       | def           | LOCK TABLES             | YES          |
| 'root'@'localhost' | def           | LOCK TABLES             | YES          |
| 'root'@'127.0.0.1' | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | PROCESS                 | YES          |
| 'root'@'localhost' | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | REFERENCES              | YES          |
| 'root'@'localhost' | def           | REFERENCES              | YES          |
| 'root'@'127.0.0.1' | def           | REFERENCES              | YES          |
| 'root'@'::1'       | def           | RELOAD                  | YES          |
| 'root'@'localhost' | def           | RELOAD                  | YES          |
| 'root'@'127.0.0.1' | def           | RELOAD                  | YES          |
| 'root'@'::1'       | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'::1'       | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | SELECT                  | YES          |
| 'root'@'::1'       | def           | SELECT                  | YES          |
| 'root'@'localhost' | def           | SELECT                  | YES          |
| 'root'@'127.0.0.1' | def           | SHOW DATABASES          |  YES          |
| 'root'@'::1'       | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost' | def           | SHOW DATABASES          | YES          |
| 'root'@'127.0.0.1' | def           | SHOW VIEW               | YES          |
| 'root'@'::1'       | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | SHUTDOWN                | YES          |
| 'root'@'127.0.0.1' | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | SUPER                   | YES          |
| 'root'@'localhost' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | TRIGGER                 | YES          |
| 'root'@'localhost' | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | UPDATE                  | YES          |
| 'root'@'localhost' | def           | UPDATE                  | YES          |
| 'root'@'127.0.0.1' | def           | UPDATE                  | YES          |
| ''@'localhost'     | def           | USAGE                   | NO           |     +--------------------+---------------+-------------------------+--------------+
85 rows in set (0.00 sec)

분명히, 긴 답변과 많은 스크롤. 또한 쿼리 출력을 텍스트 파일로 전달하기가 어려웠습니다. 여기에 짜증나는 사용하지 않고이 작업을 수행하는 방법이다 into outfile쿄코를

티 E : /sqllogfile.txt;

그리고 완료되면 로깅을 중지하십시오.

티 오프;

더 명확하게되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.