分组时如何从表格中选择最长的“字符串”


90

例:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

我有一些描述是空白的,并且可以有很多零件号,制造商,条件值,并且在组上似乎有第一个可用的描述,可以是空白。想要获得最长的描述。

我尝试了这个:

MAX(LENGTH(description)) 

但是,它返回字符串中的字符数。有可能做我想在MySQL中做的事情吗?

Answers:


181

尝试ORDER BY LENGTH(description) DESC并使用LIMIT 1仅获得最大的。


25
ORDER BY LENGTH(description) DESC LIMIT 1

这会将结果从最长到最短排序,并给出第一个结果(最长)。


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`

在我看来,这对于选择一条记录在运行时间和编写代码方面都“昂贵”。我认为子查询不是解决问题的最佳方法。
MJH

1
@rosa:您对详细程度是正确的,尽管我不确定执行时间是否会大不相同(这和ORDER BY都需要filesort)。此版本的优点是它返回最大长度的所有记录,而不仅仅是单个不确定的记录。
eggyal 2015年

@rosa:同样,回头看这个问题,我认为我的理解是OP希望获得每个组中最长的字符串,而不是整体上最长的结果。
eggyal 2015年

0

看来我回答了我自己的问题,MAX(description)似乎工作正常。


7
这不会给您最长的描述,而是最大的词汇描述(即按字母顺序排列)。但是,由于该排序会将任何非空的描述放在空的描述之后,因此如果存在的话,总是会产生一个非空的描述:也许这足以满足您的需求?
eggyal 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.