Mysql 分组时如何从表中选择最长的“字符串”
例如:Mysql 分组时如何从表中选择最长的“字符串”,mysql,Mysql,例如: SELECT partnumber, manufacturer, condition, SUM(qty), AVG(price), description FROM parts WHERE [something] GROUP BY partnumber, manufacturer, condition 我有一些描述是空白的,可能有许多零件号、制造商、条件值,在组上,它似乎采用了第一个可用的描述,可以是空白的。我想得到最长的描述 我试过这个: MAX(LENGTH(descripti
SELECT partnumber, manufacturer, condition, SUM(qty), AVG(price), description FROM parts
WHERE [something]
GROUP BY partnumber, manufacturer, condition
我有一些描述是空白的,可能有许多零件号、制造商、条件值,在组上,它似乎采用了第一个可用的描述,可以是空白的。我想得到最长的描述
我试过这个:
MAX(LENGTH(description))
但是,它返回字符串中的字符数。有可能在MySQL中实现我想做的吗?尝试按长度描述描述排序,并使用限制1来获得最大值。似乎我回答了我自己的问题,MAXdescription似乎工作得很好
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`
这将从最长到最短对结果进行排序,并给出第一个结果最长。MAXLENGTHdescription在“描述”列中返回最长值的长度。这不会给出最长的描述,而会给出词法最大值的描述,即按字母顺序排列。然而,由于该排序会将任何非空描述放在空描述之后,因此如果存在非空描述,则始终会产生非空描述:也许这足以满足您的需要?在我看来,对于选择一条记录而言,在运行时间和编写代码方面,这似乎是“昂贵的”。我不认为子查询是处理该问题的最佳方式。@rosa:关于详细性,你是对的,尽管我不确定性能时间是否会与此和按需排序文件排序有很大不同。这个版本的优点是它返回所有最大长度的记录,而不仅仅是一个不确定的记录。@rosa:另外,回顾这个问题,我认为我的理解是OP希望获得每组中最长的字符串,而不是整体上最长的结果。
ORDER BY LENGTH(description) DESC LIMIT 1