分组

2012-06-04 18 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 

这将从最长的结果进行排序,以最短,给第一个结果(最长)