2

私はこのトリッキーな点を解決しようとしていますが、成功していません。私は次のようなmysqlテーブルを持っています:

Category      Model      Description
cat1           AAA       Triple A
cat1/cat2      AAA       Triple A
cat1/cat2      BBB       Triple B
cat1           BBB       Triple B
cat3           CCC       Triple C
cat3/cat4/cat5 CCC       Triple C
cat3/cat4      CCC       Triple C

一意のモデルと「最長」のカテゴリを持つ行を選択したいと思います。基本的に私は取得したい:

Category      Model      Description
cat1/cat2      AAA       Triple A
cat1/cat2      BBB       Triple B
cat3/cat4/cat5 CCC       Triple C

ヒントはありますか?

4

3 に答える 3

4
select m.*
from MyTable m
inner join (
    select Model, max(char_length(Category)) as MaxLen
    from MyTable
    group by Model
) mm on m.Model = mm.Model and char_length(m.Category) = mm.MaxLen

実際、最も長いカテゴリではなく、最も深いカテゴリが必要な場合があります。この場合、上記よりも優れたオプションがあります。

于 2012-10-03T15:18:10.493 に答える
3

ご提供いただいたデータから、以下が機能します。

select max(category), Model, Description
from t
group by Model, Description

これは、「cat1」<「cat1/cat2」などの理由によるものです。

于 2012-10-03T15:26:20.460 に答える
1

「最長」/がカテゴリ内の最大数を意味する場合(あるべき姿)、これを試してください:

SELECT
    t.Category
    , t.Model
    , t.Description
FROM
    t
    INNER JOIN
    (
        SELECT
            Model
            , MAX(CHAR_LENGTH(Category) - CHAR_LENGTH(REPLACE(Category, '/', ''))) AS Depth
        FROM
            t
        GROUP BY
            Model
    ) AS tmax
        ON t.Model = tmax.Model
        AND CHAR_LENGTH(t.Category) - CHAR_LENGTH(REPLACE(t.Category, '/', '')) = tmax.Depth

さらに、それは機能しているようです:http ://sqlfiddle.com/#!2/725e5/3/0

于 2012-10-03T18:02:46.913 に答える