分組

2012-06-04 12 views
56

例如,當我如何從表中選擇最長的「弦」:分組

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

WHERE [something] 

GROUP BY partnumber, manufacturer, condition 

我有一些描述是空白的,可以有很多部分號碼,製造商,條件值,並在組它似乎採用了第一個可用的描述,可以是空白的。我喜歡得到最長的描述。

我想這:

MAX(LENGTH(description)) 

然而,返回字符串中的字符數。是否有可能做什麼即時嘗試在MySQL中做?

回答

110

嘗試ORDER BY LENGTH(description) DESC並使用LIMIT 1只獲得最大。

0

看來我回答了我自己的問題,MAX(description)似乎工作得很好。

+6

這不會給你* *最長的描述,而這是詞彙的說明最大值(即按字母順序排列)。但是,由於該排序會在空的描述之後放置任何非空的描述,因此如果存在一個描述,它總是會導致非空的描述:這可能足以滿足您的需求嗎? – eggyal

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` 
+0

在我看來,對於選擇一條記錄來說,在運行時間和書寫代碼方面「代價高昂」。我不認爲子查詢是處理這個問題的最好方法。 – MJH

+1

@rosa:你說的是冗長,儘管我不確定執行時間會有很大的不同(這個和ORDER BY都需要filesort)。這個版本的優點是它返回所有最大長度的記錄,而不僅僅是一個不確定的記錄。 – eggyal

+0

@rosa:同樣,回顧這個​​問題,我想我的理解是,OP想要獲得每個組中最長的字符串,而不是總體上最長的結果。 – eggyal

10
ORDER BY LENGTH(description) DESC LIMIT 1 

這將從最長的結果進行排序,以最短,給第一個結果(最長)