2015-10-11 18 views
6

Tôi đã sau Bảng (TableA):MySQL - Chọn giá trị nhỏ nhất của một cột sau khi chọn giá trị tối thiểu của cột khác

 x   y 
--------------------------- 
     3   1 
     1   4 
     1   3 

Kết quả tôi muốn x = 1 và y = 3 (Bắt x như thấp nhất có thể là ưu tiên hàng đầu, nhận được càng thấp càng tốt là ưu tiên thấp hơn). Vì vậy, tôi muốn có một câu lệnh SQL đó là một cái gì đó như thế:

Select Min(y), x 
FROM (SELECT MIN(x), y FROM tablea); 

Nhưng điều này mang lại cho tôi mã lỗi sau:

Error Code: 1248. Mỗi bảng có nguồn gốc phải có bí danh riêng của mình

Nếu tôi cố gắng rằng:

Select Min(y), x 
FROM (SELECT MIN(x), y FROM tablea) as a; 

tôi ge t:

Error Code: 1054. Unknown column 'x' trong 'danh sách trường'

+0

'Chọn Min (a.y), a.x TỪ (SELECT MIN (x) AS x, y từ tableA) như là một; ' – lad2025

+0

Cảm ơn mà làm việc! – Jariel

Trả lời

3

Để tránh lỗi unknown column bạn cần phải thêm allias để MIN(x):

Select Min(a.y), a.x 
FROM (SELECT MIN(x) AS x, y FROM tablea) as a; 

Nhưng để nhận được kết quả như bạn đã đề xuất Tôi sẽ viết lại truy vấn của bạn là:

Select x, MIN(y) AS y 
FROM tablea 
WHERE x = (SELECT MIN(x) FROM tablea); 

SqlFiddleDemo

+0

Yup cảm ơn rằng hoạt động – Jariel

+0

@Jariel Great;) – lad2025

+0

Phiên bản thứ hai là chính xác, nhưng không phải là phiên bản đầu tiên. –

3
SELECT x, y 
FROM tablea 
order by x, y 
limit 1 
+1

Điều này là tối ưu với chỉ mục trên '(x, y)'. –

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