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 回答