グループ化時にテーブルから最も長い「文字列」を選択するにはどうすればよいですか


90

例:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

空白の説明がいくつかあり、多くの部品番号、製造元、状態値が存在する可能性があり、グループでは、空白の可能性がある最初の説明を使用しているようです。できるだけ長い説明を入手したいのですが。

私はこれを試しました:

MAX(LENGTH(description)) 

ただし、文字列の文字数を返します。MySQLでやろうとしていることを行うことは可能ですか?

回答:



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`

これは、1つのレコードを選択するために、実行時間と記述されたコードで「高価」に思えます。サブクエリが問題を処理する最良の方法だとは思いません。
MJH 2015年

1
@rosa:あなたは冗長性について正しいですが、パフォーマンス時間が大幅に異なるかどうかはわかりません(これとORDER BYの両方でfilesortが必要です)。このバージョンの利点は、単一の不確定なレコードだけでなく、最大長のすべてのレコードを返すことです。
eggyal 2015年

@rosa:また、この質問を振り返ってみると、私の理解では、OPは全体で最も長い結果ではなく、各グループで最も長い文字列を取得したいと思っていました。
eggyal 2015年

0

私は自分の質問に答えたようです、MAX(説明)はうまく機能しているようです。


7
これは、最も長い説明ではなく、字句の最大値(アルファベット順)を示します。ただし、その順序付けでは空でない説明が空の説明の後に配置されるため、空でない説明が存在する場合は常に空ではない説明になります。おそらくこれで十分でしょうか?
eggyal

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.