Mục đích của Order By 1 trong câu lệnh chọn SQL là gì?


154

Tôi đang đọc qua một số mã cũ tại nơi làm việc và nhận thấy rằng có một số khung nhìn với một order by 1mệnh đề. Điều này thực hiện được những gì?

Thí dụ:

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
FYI: Nhìn chung, nó được coi là thông lệ xấu khi có ĐẶT HÀNG theo lượt xem, trừ khi bạn có thể đảm bảo rằng chế độ xem sẽ chỉ được sử dụng để trình bày. Thật lãng phí vì ORDER BY sẽ xảy ra 2 lần nếu bạn sử dụng chế độ xem trong một truy vấn khác với ORDER BY.
Ngựa Non OMG

3
@OMG Ponies: thường được coi là bất hợp pháp khi có ORDER BYmột VIEW. SQL chuẩn không cho phép nó. SQL Server đã đặt ra ngoài vòng pháp luật từ năm 2005. Đối với việc triển khai SQL cho phép hành vi đó phần lớn không có giấy tờ và phản biện trực quan. Nói cách khác, nhất định phải tránh.
ngày

@encedaywhen: Bạn đang giảng cho dàn hợp xướng, nhưng MySQL cho phép ĐẶT HÀNG theo lượt xem , cũng như Oracle IME. SQL Server cho phép ĐẶT HÀNG B ifNG nếu TOPcó, và SSMS thích thêm TOP 100 PERCENT.
Ngựa Non OMG

@OMG Ponies @ "MySQL cho phép ĐẶT HÀNG theo lượt xem" - MySQL cho phép một CHECKràng buộc trong một CREATE TABLEnhưng nó không thực sự tôn trọng nó - nó thực sự không bao giờ được kiểm tra! Câu hỏi đặt ra là, các sản phẩm SQL này có luôn tôn trọng các ORDER BYkhung nhìn hay không, ví dụ như khi được sử dụng trong một truy vấn cũng có ORDER BYđược sắp xếp hai lần không? Họ thậm chí có ghi lại hành vi hay bạn phải xem các kế hoạch thực hiện để xử lý nó? Tôi nghĩ rằng chúng ta biết câu trả lời;)
onedaywhen

FYI Chỉ cần phát hiện ra một cách sử dụng khác để ORDER BY 1... sử dụng thủ thuật áp dụng chéo trong đó bạn muốn có một bí danh trống. Thật không may, mã ví dụ quá lớn cho một bình luận vì vậy tôi đã đăng nó dưới dạng câu trả lời bên dưới FYI.
AndrewD

Câu trả lời:


208

Điều này:

ORDER BY 1

... được gọi là "Thông thường" - số là viết tắt của cột dựa trên số cột được xác định trong mệnh đề SELECT. Trong truy vấn bạn cung cấp, nó có nghĩa là:

ORDER BY A.PAYMENT_DATE

Đó không phải là một thực hành được khuyến nghị, bởi vì:

  1. Nó không rõ ràng / rõ ràng
  2. Nếu thứ tự cột thay đổi, truy vấn vẫn hợp lệ, do đó bạn có nguy cơ đặt hàng theo thứ gì đó bạn không có ý định

1
Câu hỏi của tôi hỏi liệu có một mặt trái nào trong việc sử dụng Thông thường: stackoverflow.com/questions/2253040/ Lời
OMG Ponies

Điều này chỉ có sqlthẻ. Trong SQL tiêu chuẩn, chỉ các tên tương quan cột được cho phép trong OREDER BYmệnh đề bởi vì, về lý thuyết, các tên tương quan bảng nằm ngoài phạm vi nghĩa là phải có ORDER BY PAYMENT_DATE;. Tất nhiên, không phải tất cả các triển khai SQL đều tuân thủ Tiêu chuẩn.
onedaywhen

Đã thử nghiệm và làm việc trong 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, bạn đã đề cập rằng đó không phải là một thực tiễn được đề xuất, vậy đâu sẽ là sự thay thế tốt nhất tiếp theo? hỏi lồn tôi tò mò .. cảm ơn!
dian jin

40

Điều này hữu ích khi bạn sử dụng các toán tử dựa trên tập hợp, ví dụ: union

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

4
Aha, điều đó có ý nghĩa. Đây là lý do tốt đầu tiên tôi thấy cho đến nay.
tiếng vang

4
@Lazer Tôi không tin như vậy, để thực hiện một liên minh có thể thực hiện sắp xếp nội bộ, nhưng đây là một câu hỏi triển khai trái ngược với câu hỏi đầu ra logic và theo tinh thần của SQL, không cần phải xuất các hàng theo thứ tự. Ngoài ra nếu bạn muốn sắp xếp giảm dần? Sau đó, bạn trở lại vấn đề ban đầu.
daven11

3
vẫn ... tôi thà sử dụngorder by tablea.cola
Shahar Shokrani

1
@ShaharShokrani sẽ không hoạt động. nhưng bạn có thể nói, tôi thích chọn cola là x từ tablea union chọn colb là x từ thứ tự bảng theo x;
Ozgur Ozturk

chọn * từ (chọn cola col từ tablea union chọn colb col từ bảngb) theo thứ tự col
hareluya86

8

nó chỉ đơn giản có nghĩa là sắp xếp khung nhìn hoặc bảng theo cột thứ nhất của kết quả truy vấn.


7

Tôi tin vào Oracle nó có nghĩa là thứ tự theo cột số 1


7

Điều này sẽ sắp xếp kết quả của bạn theo cột đầu tiên được trả về. Trong ví dụ này, nó sẽ sắp xếp theo Payment_date.


4

Như đã đề cập trong các câu trả lời khác ORDER BY 1theo cột đầu tiên.

Tôi đã gặp một ví dụ khác về nơi bạn có thể sử dụng nó mặc dù. Chúng tôi có một số truy vấn nhất định cần được đặt hàng chọn cùng một cột. Bạn sẽ gặp lỗi SQL nếu đặt hàng Nameở bên dưới.

SELECT Name, Name FROM Segment ORDER BY 1

Tại sao bạn lại làm vậy? Tại sao không bí danh họ. [bình luận quá muộn]
abdul qayyum

1
@abdulqayyum nó chỉ là một cách khác để làm mọi thứ thực sự. Ví dụ trên rất đơn giản. Đôi khi, cột 'Tên' thực sự là các cột khác nhau từ các bảng khác nhau mà bạn đang chèn vào một bảng khác. Thêm một loạt các bí danh có thể làm cho việc đọc khó khăn hơn. Một ví dụ khác về nơi nó được sử dụng là khi chọn nhiều phép tính khác nhau và muốn đặt hàng theo một - mà không cần bí danh. (Mặc dù ở đây, cá nhân tôi muốn có một bí danh để nói tính toán là gì)
nicV

-1

Cũng thấy:

http://www.techonthenet.com/sql/order_by.php

Đối với một mô tả của thứ tự bởi. Tôi đã học được điều gì đó! :)

Trước đây tôi cũng đã sử dụng điều này khi tôi muốn thêm số lượng bộ lọc không xác định vào câu lệnh sql. Sloppy tôi biết, nhưng nó đã làm việc. : P


-1

Một ví dụ ở đây từ cơ sở dữ liệu máy chủ WAMP thử nghiệm mẫu: -

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)

Và khi nó được bổ sung order by PRIVILEGE_TYPEhoặc có thể được đưa ra order by 3. Lưu ý cột thứ 3 ( PRIVILEGE_TYPE) sắp xếp theo thứ tự abc.

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)

DEFINITIVELY, một câu trả lời dài và rất nhiều cuộn. Ngoài ra, tôi đã cố gắng hết sức để chuyển đầu ra của các truy vấn vào một tệp văn bản. Đây là cách để làm điều đó mà không sử dụng điều gây phiền into outfilenhiễu-

tee E: /sqllogfile.txt;

Và khi bạn đã hoàn tất, dừng đăng nhập-

phát bóng;

Hy vọng nó thêm rõ ràng hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.