Làm cách nào để chọn 'chuỗi' dài nhất từ ​​bảng khi nhóm


90

Thí dụ:

SELECT partnumber, manufacturer, condition, SUM(qty), AVG(price), description FROM parts

WHERE [something]

GROUP BY partnumber, manufacturer, condition

Tôi có một số mô tả bị trống và có thể có nhiều giá trị partnumber, nhà sản xuất, điều kiện và trên nhóm, dường như có sẵn mô tả đầu tiên, có thể để trống. Tôi muốn có được mô tả dài nhất có sẵn.

tôi đã thử cái này:

MAX(LENGTH(description)) 

tuy nhiên điều đó trả về số ký tự trong chuỗi. Có thể làm những gì tôi đang cố gắng làm trong MySQL không?

Câu trả lời:


182

Hãy thử ORDER BY LENGTH(description) DESCvà sử dụng LIMIT 1để chỉ nhận được lớn nhất.


26
ORDER BY LENGTH(description) DESC LIMIT 1

Điều này sẽ sắp xếp các kết quả từ dài nhất đến ngắn nhất và đưa ra kết quả đầu tiên (dài nhất.)


3
SELECT   partnumber, manufacturer, `condition`, SUM(qty), AVG(price), description
FROM     parts
WHERE    [something] AND LENGTH(description) = (
           SELECT MAX(LENGTH(description))
           FROM   parts AS p
           WHERE  p.partnumber   = parts.partnumber
              AND p.manufacturer = parts.manufacturer
              AND p.condition    = parts.condition
         )
GROUP BY partnumber, manufacturer, `condition`

Điều này đối với tôi dường như là 'đắt tiền', về thời gian chạy và mã được viết, cho việc lựa chọn một bản ghi. Tôi không nghĩ truy vấn phụ là cách tốt nhất để xử lý vấn đề.
MJH

1
@rosa: bạn nói đúng về tính chi tiết, mặc dù tôi không chắc thời gian thực hiện sẽ khác nhau nhiều (cả điều này và ORDER BY đều yêu cầu tệp tin). Ưu điểm của phiên bản này là nó trả về tất cả các bản ghi có độ dài tối đa, không chỉ là một bản ghi không xác định.
eggyal

@rosa: ngoài ra, nhìn lại câu hỏi này, tôi nghĩ sự hiểu biết của tôi là OP muốn có được chuỗi dài nhất trong mỗi nhóm, thay vì kết quả dài nhất về tổng thể.
eggyal,

0

Có vẻ như tôi đã trả lời câu hỏi của riêng mình, MAX (mô tả) dường như hoạt động tốt.


7
Điều đó sẽ không cung cấp cho bạn mô tả dài nhất , thay vì mô tả là tối đa từ vựng (nghĩa là theo thứ tự bảng chữ cái). Tuy nhiên, vì thứ tự đó sẽ đặt bất kỳ mô tả không trống nào sau những mô tả trống, nó sẽ luôn dẫn đến mô tả không trống nếu tồn tại: có lẽ điều này là đủ cho nhu cầu của bạn?
eggyal

0

MAX (LENGTH (mô tả)) trả về độ dài của giá trị dài nhất trong cột Mô tả.

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.