2012-07-05 27 views
12

Tôi đã có một câu hỏi trong MySQL, đã làm nó một cách chính xác. Nhưng mã sách khác một chút.đơn đặt hàng này là 1?

Sách:

use tennis; 
select playerno, datediff(coalesce(end_date, current_date), 
begin_date) as Difference, position 
from committee_members 
where datediff(coalesce(end_date, current_date), begin_date) > 500 
order by 1; 

trật tự này bằng 1 là gì?

Mã của tôi cũng làm việc và là gần như giống nhau, ngoại trừ:

select playerno, datediff(coalesce(end_date, current_date) AS Data, 
order by Data; 
+0

StackOverflow - tại sao u không dễ dàng để định dạng ??? :( – Master

+2

Dễ dàng định dạng mã, miễn là bạn đọc trợ giúp định dạng :) – Ryan

+0

Chỉ cần thêm 4 dấu cách khi bắt đầu dòng để tạo khối mã. Nhưng hãy chắc chắn để có một dòng trống trước khi một trong những đầu tiên. Bạn có thể xem thêm trên biểu tượng trợ giúp của trình chỉnh sửa. – rcdmk

Trả lời

23

order by 1 có nghĩa là "trật tự của các trường đầu tiên tôi đã chọn" - tức là, trong trường hợp này, giống như order by playerno, vì playerno là trường đầu tiên trong danh sách.

Chỉnh sửa: Làm một cái nhìn lướt qua một dự thảo của SQL-92 standard xác nhận điều này:

10)If ORDER BY is specified, then each <sort specification> in the 
     <order by clause> shall identify a column of T. 

     Case: 

     a) If a <sort specification> contains a <column name>, then T 
      shall contain exactly one column with that <column name> and 
      the <sort specification> identifies that column. 

     b) If a <sort specification> contains an <unsigned integer>, 
      then the <unsigned integer> shall be greater than 0 and not 
      greater than the degree of T. The <sort specification> iden- 
      tifies the column of T with the ordinal position specified by 
      the <unsigned integer>. 

Trong trường hợp này, b là một trong những điều đó dường như được áp dụng. Mặc dù tôi chắc chắn có ít nhất một vài thay đổi giữa bản nháp này và văn bản cuối cùng của tiêu chuẩn (không kể đến một phiên bản của tiêu chuẩn này và tiêu chuẩn khác) có vẻ như không có điều gì cơ bản này thay đổi (có thể là bao giờ).

+0

cảm ơn! hiểu rồi ! đẹp và rõ ràng! – Master

+0

Thay vì tuân theo một tiêu chuẩn tuân thủ, chúng ta hãy quay lại với các tài liệu riêng của MySQL: https://dev.mysql.com/doc/refman/5.7/en/select.html từ khóa: 'order by 2' – Sinkeat

5

Điều này được gọi là "ORDER BY ordinal", về cơ bản được sắp xếp theo cột ở vị trí đó. Sắp xếp theo 1 có nghĩa là đơn đặt hàng của cột được chọn đầu tiên. Trong ví dụ của bạn, nó sẽ tương đương với cách nói ORDER BY playerno

Tôi sẽ không khuyên bạn nên làm theo cách này mặc dù không rõ cột nào đang tham chiếu và nếu thứ tự cột thay đổi truy vấn sẽ trả về các kết quả khác nhau.

Tài nguyên khác:

Quick Tip: Order By 1 Desc

Bad habits to kick : ORDER BY ordinal

SQL: order by

+0

..... .................chính xác ! – Master

Các vấn đề liên quan